2016-10-10 4 views
-1

У меня есть линия, представленная двумя точками (A и B) и другой точкой (C), которая не принадлежит этой строке. Как я могу получить начальную и конечную точки параллельной линии, содержащей данную точку (C)?Получить параллельную линию

EDIT

У меня есть быстрый класс, который представляет линию глаз на картинке.

var eyesLine = Line(start: rightEye, end: leftEye) 

где rightEye и leftEye являются экземплярами CGPoint;

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

+0

Вы уже что-то пробовали? – RCaetano

+0

Я не уверен, если бы понял ваш вопрос. Я что-то пробовал? –

+1

'D = C + B - A' – Sneftel

ответ

0

Линейное уравнение: y = mx + b. Поэтому, если вам нужна параллельная линия, у вас должна быть линия с одним и тем же уклоном (m), но с учетом требуемой точки (C).

Следующая формула также верно: m = (y_B - y_A)/(x_B - x_A)

Поэтому в основном вам нужно решить следующее уравнение с вашей точки:

b = y_C - ((y_B - y_A)/(x_B - x_A)) * x_C

Тогда вам просто нужно вычислить другую y координаты вашего выбора путем изменения значений x (поскольку C уже является одной точкой новой линии):

y_D = ((y_B - y_A)/(x_B - x_A)) * x_D + (y_C - ((y_B - y_A)/(x_B - x_A)) * x_C)

Чтобы упростить еще больше ваша задача, которую вы можете предположить, что x_D = 0 (пример), и тогда вы будете иметь только вычислить:

y_D = y_C - ((y_B - y_A)/(x_B - x_A)) * x_C

Ваши конечные точки будут иметь (x_C, y_C) и (0, y_D) координаты.

Примечание:

В начале вашего скрипта, вы должны также проверить, если x_A = x_B. Если это так, то ваши окончательные пункты будут иметь (x_C, y_C) и (x_C, y_D) координаты, где y_D может быть любым значением, кроме y_C.

HTH;)

+0

Что делать, если линия вертикальна? Школьное уравнение линии не полностью подходит для компьютерной геометрии. – MBo

+0

Добавлено это исключение @MBo;) – RCaetano

Смежные вопросы