Как я тяну эллипс с произвольной ориентацией попиксельно?

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

Корректно мое подозрение об этом методе? Как я мог выполнить эту задачу более точно?

Я программирую в C++ (хотя это не должно действительно иметь значения, так как это - более ориентированный на алгоритм вопрос).

Править: как David указал, я предполагаю, что могу действительно задаваться вопросом, как сделать пиксельную интерполяцию.

9
задан amc 28 June 2010 в 00:38
поделиться

2 ответа

Использование:

x = X cos(a) - Y sin(a)
y = Y cos(a) + X sin(a)

Где a - угол поворота против часовой стрелки, (x, y) - новые координаты, а (X, Y) старые.

Для сохранения точности следует использовать числа с плавающей запятой. Просто пройдите каждую точку, примените трансформацию и вуаля.

Изменить: после некоторого поиска вот код от Microsoft: http://research.microsoft.com/en-us/um/people/awf/graphics/bres-ellipse.html , который рисует растровые конические сечения.

9
ответ дан 4 December 2019 в 15:11
поделиться

Брезенхэм (известный своим алгоритмом рисования линий ) также имеет алгоритм рисования эллипса. Вы можете попробовать погуглить эллипс Брезенхэма .

3
ответ дан 4 December 2019 в 15:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: