Как компьютер рисует линию? - PullRequest
6 голосов
/ 29 июля 2011

Windows GDI имеет следующие функции:

MoveTo ();

LineTo ();

Они принимают координаты, где начинать рисовать и где останавливать рисование.

Но как эти функции реализованы ?? (особенно LineTo)

Нужно ли им вычислять все точки между точкой A и точкой B ??

Как эта линия нарисована точно ??

Ответы [ 4 ]

7 голосов
/ 29 июля 2011

Да, они вычисляют каждую отдельную точку между А и В.

Наиболее распространенный способ сделать это эффективно известен как Алгоритм линии Брезенхема .

Обратите внимание, чтоWindows LineTo не рисует последнюю точку.Когда отрезки линий рисуются один за другим, это предотвращает двойное рисование конечных точек.

2 голосов
/ 29 июля 2011

никто, кто никогда не видел исходный код Windows, не может ответить на это всесторонне ... НО Windows, как и любое другое программное обеспечение, нуждается в некотором алгоритме для рисования линии ... один такой алгоритм вы можете увидеть здесь http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm

Moveto «проще» в том, что он просто обновляет текущие координаты, известные системе ...

1 голос
/ 29 июля 2011

Не нужно вычислять все точки между A и B (которые бесконечны), а только дискретные пиксели между A и B. Обычно это стандартный алгоритм растеризации линий. См. Википедия для алгоритма растеризации строк Брезенхэма, который является стандартным примером учебника и обычно основой для более гибких алгоритмов растеризации.

0 голосов
/ 30 июля 2011

Я подозреваю, что происходит нечто большее, чем просто (форма) Брезенхэма, так как есть (необязательно) сглаживание. см. эту статью о том, что может быть реализованным алгоритмом (алгоритм линии Сяолиня Ву)

...