Как БЫСТРО закрасить треугольник ?
От: Mader Россия  
Дата: 18.02.02 13:48
Оценка:
Хотелось бы узнать пару алгоритмов как можно быстро нарисовать закрашенный треугольник.
Re: Как БЫСТРО закрасить треугольник ?
От: Кодт Россия  
Дата: 18.02.02 14:30
Оценка: 2 (1)
Здравствуйте Mader, Вы писали:

M>Хотелось бы узнать пару алгоритмов как можно быстро нарисовать закрашенный треугольник.


Пусть треугольник — ABC (точки отсортированы по вертикали).
Если yB > yC (основание не горизонтальное) — разбиваем треугольник горизонтом BD (D лежит на AC).

Закраска треугольника ABC с горизонтальным основанием (ABD, BDC — аналогично):
последовательно перебираем горизонты в диапазоне yA..yB,
находим точки M и N пересечения горизонта с отрезками AB и AC соответственно.
Рисуем линию MN.

Этот способ прост, но связан с вычислениями с плавающей запятой.
В принципе, есть быстрые целочисленные алгоритмы рисования (а значит, и сканирования) наклонных линий, но они неочевидны.

У меня где-то валялась книга об этом...
Перекуём баги на фичи!
Re[2]: Как БЫСТРО закрасить треугольник ?
От: Кодт Россия  
Дата: 18.02.02 14:32
Оценка:
Предполагая, что yA <= yB <= yC,
следует читать "Если yB < yC"...
Перекуём баги на фичи!
Re: Как БЫСТРО закрасить треугольник ?
От: Strudel  
Дата: 18.02.02 14:34
Оценка: 2 (1)
Здравствуйте Mader, Вы писали:

M>Хотелось бы узнать пару алгоритмов как можно быстро нарисовать закрашенный треугольник.


Не простой алгоритм. Я прикидываю так:
Во первых у нас должна быть быстрая процедура рисования горизонтальной линии. Во вторых должны иметь представлени как строить не только горизонтальные линии. Дальше,
берем одну из точек треугольника, а именно верхнюю. Начинаем строить от нее стороны треугольника к оставшимся двум, "левую" и "правую". Тут важно определить какая из сторон более круто идет вниз, это будет "ведущая" сторона. Находя каждый следующий пиксель ведущей стороны мы строим из него горизонтальную линию "до пересечения" со второй, более полого спускающейся стороной. Тут очень тонкий момент, точка пересечения это последняя, самая левая/правая точка горизонтальной строки которую может из себя представлять участок стороны (и что самое грустное это оносится и "ведущей" стороне, так что там тоже надо отслеживать этот момент и начинать строить горизонталь только от крайних точек). Если вы всё поняли из выще изложенного, то продолжать нет смысла, я уверен додумаете сами.

Ну это так, мои прикидки.

Это должно быть чудный алгоритм со скрытыми (а от этого еще более интересными) возможностями для оптимизации.
Re: Как БЫСТРО закрасить треугольник ?
От: Gambler  
Дата: 20.02.02 09:10
Оценка:
Здравствуйте Mader, Вы писали:

M>Хотелось бы узнать пару алгоритмов как можно быстро нарисовать закрашенный треугольник.


http://www.enlight.ru/faq3d/articles/24.htm
-------------------------------------------------------------------

Вызывает презедент к себе коров и говорит:
— Ну, что будем сдавать, молоко или мясо?
(с) Г. Явлинский TV6 — Герой дня (18.04.2002)
Re: Как БЫСТРО закрасить треугольник ?
От: volk  
Дата: 21.02.02 00:14
Оценка:
Здравствуйте Mader, Вы писали:

M>Хотелось бы узнать пару алгоритмов как можно быстро нарисовать закрашенный треугольник.


Может быть, получится закрашивать "по спирали". То есть, треугольник сначала обводится нужным цветом. Затем нужно двигаться вдоль одной из сторон, закрашивая точки до тех пор, пока очередная не будет иметь цвет закраски до того, как ее закрасили (извиняюсь за свой богатый словарный запас). После этого нужно продолжать процесс, но двигаясь параллельно другой стороне. И так до тех пор, пока движение не выродится в стояние на месте.
Существенный недостаток здесь -- необходимость узнавать цвет точки перед тем, как она будет закрашена. Кроме того, если, например, красить синим по полосато-синему, то алгоритм не сработает, то есть цвет закраски должен быть уникальным.
Тот, кто желает, но не делает, распространяет чуму.
Re[2]: Как БЫСТРО закрасить треугольник ?
От: Аноним  
Дата: 21.02.02 07:39
Оценка:
Здравствуйте Gambler, Вы писали:

G>Здравствуйте Mader, Вы писали:


M>>Хотелось бы узнать пару алгоритмов как можно быстро нарисовать закрашенный треугольник.


G>http://www.enlight.ru/faq3d/articles/24.htm


Я не разбирался, но судя по всему это не целочисленный алгоритм.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.