| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > Градиентная заливка треугольника. |
| Автор: nnvz 21.2.2006, 09:53 |
Задача состоит в следующем: имеем на полотне три виртуальных точки, каждая своего цвета. Нужно залить треугольник, образуемый этими точками, ровным градиентом, примерно так:![]() Нужно реализовать это безо всяких сторонних библиотек вроде OpenGL. |
| Автор: maxim1000 21.2.2006, 11:33 |
| а что именно интересует: вычисление цвета точки или способ рисования этих точек? |
| Автор: nnvz 21.2.2006, 11:53 |
| Именно вычисление цвета, куда выводить и как - неважно |
| Автор: maxim1000 21.2.2006, 12:14 |
| ну, из того, что я увидел, можно придумать такое: 1. проводим медиану из левой точки 2. верхний треугольник закрашиваем градиентом от верхней угловой точки до левой 3. нижний - от нижней до левой еще можно немного другой способ, он более логичным кажется: каждая точка в треугольнике представляется, как выпуклая комбинация его вершин можно взять эти коэффициенты и составить по ним выпуклую комбинацию уже из цветов (для каждой точки нужно будет указать свой цвет)... |
| Автор: MBo 21.2.2006, 17:39 | ||
| Даны три точки A,B,C. Введем непрямоугольную систему координат с началом в точке A и базовыми векторами i=(B-A) и j=(C-A). Для точки D внутри треугольника найдем параметрические координаты s и t из векторного соотношения D-A = s*i +t*j, расписав его по координатам X и Y. Цвет в точке D будет линейной комбинацией цветов вершин с весами A (1-s-t) B(s) C(t) s и t лежат в пределах 0..1, и их сумма не превышает 1. Например, середина стороны BC имеет координаты 1/2, 1/2 и цвет - среднее B и С Пример на Дельфи. Регион введен для простоты проверки. сдвиги на 8 влево-вправо - чтобы работать в целочисленной арифметике. Отмечу, что в Windows GDI есть функция GradientFill, которая умеет рисовать подобные вещи.
|