Вам на самом деле не нужны триггеры для этого. Просто используйте уклоны или измените x
и y
.
При заданной линии наклона m = y/x
линия, перпендикулярная этой линии, имеет наклон -1/m
или -x/y
.
Наклон m между красными точками равен -150/150
или -1/1
. Я заметил ваши положительные y
баллы вниз.
Следовательно, положительный наклон равен 1/1
. Ваши x и y изменяются с одинаковой скоростью, с одинаковым количеством.
Как только вы это узнаете, все остальное будет довольно легко выяснить. Так как они выровнены под углом 45 градусов, соотношение сторон треугольника 45-45-90
равно 1 : 1 : sqrt(2)
. Таким образом, если ваша длина равна 20
, индивидуальное изменение x и y будет равно 20/sqrt(2)
или примерно 14
в целых числах.
Итак, ваши две желтые точки будут на (36, 236)
и (64, 264)
. Если линии не выровнены в удобной степени, вам придется использовать arctan()
или что-то подобное, и получить угол между линией и горизонтальной линией, чтобы вы могли вычислить соотношение изменения x и y.
Надеюсь, мой ответ не был слишком сложным для подражания. Для более общего решения см. Ответ Трубадура.
Редактировать: Поскольку ОП говорит, что нижняя красная точка фактически вращается вокруг верхней красной точки, нам потребуется более гибкое решение.
Я собираюсь расширить этот ответ от Трубадура, так как я делаю то же самое. Пожалуйста, смотрите его пост, когда вы читаете мой.
1.
Получить вектор от начала координат (200, 100) до точки вращения (50, 250):
vector = (200 - 50, 100 - 250) = (150, -150)
2.
Поверните ваш вектор, поменяв местами x и y, и отмените x, чтобы получить новый вектор:
vector = (150, -150) => swap => (-150, 150) => negate x => (150, 150)
3.
Получите единичный вектор (длиной 1) из нового вектора:
vector = vector / length(vector)
= (150 / length(vector), 150 / length(vector))
~= (0.7071, 0.7071)
where
length(vector) = sqrt(150^2 + 150^2) ~= 212.2320
4.
Получите вектор смещения длины 20, умножив единичный вектор.
displacement_vector = vector * 20
= (0.7071 * 20, 0.7071 * 20)
= (14.1421, 14.1421)
5.
Добавьте / вычтите этот вектор из / в ваш вращающийся вектор (точку):
yellow_1 = (50, 250) + (14.1421, 14.1421) ~= (64, 254)
yellow_2 = (50, 250) - (14.1421, 14.1421) ~= (36, 236)
Я надеюсь, что описанные выше шаги помогут вам сформулировать ваш код. Неважно, под каким углом, те же самые шаги.