#geometry
#геометрия
Вопрос:
У меня есть линия, представленная двумя точками (A и B) и другой точкой (C), которая не принадлежит этой линии. Как я могу получить начальную и конечную точки параллельной линии, которая содержит заданную точку (C)?
Редактировать
У меня есть класс swift, который представляет линию глаз на картинке.
var eyesLine = Line(start: rightEye, end: leftEye)
где rightEye и leftEye являются экземплярами CGPoint;
Я хочу получить линию, которая представляет рот. Из CIDetector я получаю центр рта. Предположим, что угол рта такой же, как у глаз, я хочу получить линию, параллельную глазам.
Комментарии:
1. Вы уже что-то пробовали?
2. Я не уверен, понял ли я ваш вопрос. Я пробовал что?
3.
D = C B - A
4. Пробовал что-нибудь закодировать?
5. @VladHatko Я думаю, он спрашивал: «Вы пробовали буквально что-нибудь», поскольку кажется вероятным, что вы добились бы успеха, если бы у вас было.
Ответ №1:
Уравнение линии 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 😉
Комментарии:
1. Что, если линия вертикальная? Уравнение школьной линии не полностью подходит для компьютерной геометрии.
2. Добавлено это исключение @MBo 😉