Я пытаюсь реализовать градиентную кисть с нуля на С++ с помощью GDI. Я не хочу использовать GDI+ или любую другую графическую среду. Я хочу, чтобы градиент был любого направления (произвольный угол).
Мой алгоритм в псевдокоде:
For each pixel in x dirrection
For each pixel in the y direction
current position = current pixel - centre //translate origin
rotate this pixel according to the given angle
scalingFactor =( rotated pixel + centre ) / extentDistance //translate origin back
rgbColor = startColor + scalingFactor(endColor - startColor)
extendDistance — это длина линии, проходящей из центра прямоугольника и имеющей градиент, равный углу градиента.
Хорошо, пока все хорошо. Я могу нарисовать это, и это выглядит красиво. НО, к сожалению, из-за бита вращения углы прямоугольника имеют неправильный цвет. Результат идеален только для углов, кратных 90 градусам. Проблема заключается в том, что коэффициент масштабирования не масштабируется по всему размеру прямоугольника.
Я не уверен, что вы поняли мою точку зрения, потому что очень сложно объяснить мою проблему без ее визуализации.
Если кто-то может помочь или перенаправить меня на какой-то полезный материал, я был бы признателен.