2016-09-08 2 views
1

Для введения компьютерной графической бумаги я изо всех сил стараюсь расширить линию, определяемую двумя точками, используя тот же градиент к краю окна. Трудно объяснить, что этот образ, скорее всего, поможет.Учитывая две точки внутри рамки окна (x0, y0 и x1, y1) - Какой метод вы использовали бы, чтобы расширить линию до краев окна?

IMG

Пунктирная линия представляет собой часть не определяется линией (x0, y0, чтобы x1, y1).

Мы пробовали несколько вещей, используя неявное уравнение линии (ax + bx + c = 0) и находим точку пересечения со всеми четырьмя краями оконной рамы.

Любая помощь очень ценится!

ответ

1

Ваша первая задача - проверить, что (x0, y0) и (x1, y1) - это отличные пункты.

неявное уравнение без вертикальной линии на самом деле y = mx + c, где градиентm является (y1 - y0)/(x1 - x0) и c является перехват на y оси, которая может быть найдена путем применения c = y1 - mx1 или c = y0 - mx0.

После того, как у вас есть значения m и c, вы можете применить уравнение линии, чтобы найти y пунктов, приведенных ваш набор x точек (или наоборот), чтобы построить линию до нужной длины.

Вертикальная линия характеризуется x0, равной x1. В этом случае ваш график представляет собой просто линию, которая пересекает ось x по адресу x0.

Также обратите внимание, что линия будет перехватывать только 2 ребра (если линия не коллинеарна с одним из краев).

+1

коллинеарность случая в результате вертикальной линии (т.е. 'x0 = x1') вам придется обращаться в специальном (но очень просто). В противном случае вы столкнетесь с делением на нулевые исключения. Для горизонтальной коллинеарности просто «m = 0». –

+0

Просто добавил это, когда писал свой комментарий ;-) – Bathsheba

+0

Извинения, наши лекционные заметки говорят, что ax + by + c является неявным выражением строки. Наша проблема заключается в том, что нам нужно иметь дело с вертикальными линиями, следовательно, использование этого уравнения. –

0

Вы можете придумать с нормальной формой уравнения линии:

n = (y1-y0, x0-x1) 

(п есть направление от одной точки в другую с поворотом на 90 °)

Уравнения для точек p на линии :

p * n = (x0, y0) * n 

или

(p - (x0, y0)) * n = 0 

* обозначает скалярное произведение выше, но не ниже.

поэтому уравнение для решения является

(px - x0) * (y1 - y0) + (py - y0) * (x0 - x1) = 0 

Все скоординированные px и py (х и у координаты точки) приведены, и один из px и py определяется стороной, которую вы хотите пересекаются. Остерегайтесь делений на 0, однако, если вы решаете это уравнение (горизонтальные/вертикальные линии).

0

Если у вас есть неявное уравнение

ax + by + c = 0 

и оконные края координат Left, Top, Right, Bottom (слева и сверху могут быть равен нуль), то вы можете заменить эти координаты в уравнение и проверить, что расчетную точку Безразлично Не превышайте границы окна.

Например, чтобы получить пересечение с правым краем, подставит Right х-координату

a * Right + b * y + c = 0 
if b = 0 then 
    no intersection (vertical) 
else 
    y = (a * Right + c)/b  
check whether Top <= y <= Bottom