#algorithm #vector #geometry #console-application #rasterizing
#алгоритм #вектор #геометрия #консольное приложение #растрирование
Вопрос:
У меня, например, есть 2 пункта A(1, 30)
B(20, 10)
. Я должен нарисовать в консоли вектор с ближайшим путем *
. Я должен получить каждую точку пути, как я могу это сделать?
Комментарии:
1. Посмотрите на алгоритм Брессенхэма для растеризации отрезка линии.
Ответ №1:
Для этого могут быть различные решения. Одним из решений является повторение (например, с использованием двух for
циклов) по всем точкам между A
и B
и проверка, проходит ли линия через каждую точку.
И вам нужен критерий, чтобы решить, проходит ли отрезок AB
прямой через определенную точку P(x,y)
. Например, вы можете измерить евклидово расстояние от точки P
до линии AB
. Тогда точка лежит на прямой, если расстояние меньше определенного значения, скажем 0,5.
Еще один критерий для принятия решения P
о том, лежит ли на AB
, — это проверить AB
, проходит ли линия через квадрат 1×1 с центром в P(x,y)
. Четыре угла этого квадрата — P1(x-0.5,y-0.5)
, P2(x-0.5,y 0.5)
, P3(x 0.5,y-0.5)
и P4(x 0.5,y 0.5)
. Чтобы выяснить, проходит ли линия через этот квадрат, вы можете оценить эти четыре угла и определить, все ли они лежат на одной стороне линии. Если это так, то линия не пересекает квадрат, а в противном случае она пересекает квадрат.
Используя каждый критерий, вы получите набор точек, которые, как предполагается, лежат на отрезке прямой.
Комментарии:
1. Это ненадежный способ. Посмотрите на комментарий Марка Лавина. .