Пропавшие без вести координат. Основная справка тригонометрии

обратитесь к моей быстрой схеме, присоединенной ниже.

то, что я пытаюсь сделать, получают координаты желтых точек при помощи угла от известных координат красных точек. принятие каждой желтой точки на расстоянии приблизительно в 20 пикселей от x:50/y:250 красной точки под прямым углом (я думаю, что это - то, чем это называют), как я получаю их координаты?

я полагаю, что это - очень простая тригонометрия, и я должен использовать Math.tan (), но они не преподавали нам много математики в художественной школе.

сопроводительный текст http://www.freeimagehosting.net/uploads/e8c848a357.jpg

7
задан Xavier Ho 1 June 2010 в 12:22
поделиться

5 ответов

Для этого вам не нужны триггеры. Просто используйте наклоны или измените x и y .

Для линии наклона m = y / x , прямая, перпендикулярная этой линии, имеет наклон -1 / м или -x / y .

Наклон m между красными точками составляет -150/150 или -1/1 . Я заметил ваши положительные и точки вниз.

Следовательно, положительный наклон равен 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)

Я надеюсь, что приведенные выше шаги помогут вам в формулировании вашего кода. Неважно, под каким углом, шаги те же.

7
ответ дан 6 December 2019 в 12:46
поделиться

Это довольно просто, если вы знаете, что он будет оставаться под углом 45 градусов. Если расстояние от 50 до 250 равно 20, то точки находятся в (50 - (20 * sqrt (2)), 250 - (20 * sqrt (2))) и (50 + (20 / sqrt (2)), 250 + (20 / sqrt (2))) .

Как правило, часть 20 * sqrt (2) каждого должна быть заменена на (расстояние) * cos (угол) и расстояние * sin (угол) . Один предназначен для координаты x, а другой - для координаты y. (в зависимости от того, с какой стороны вы измеряете угол!)

Таким образом, вы должны использовать sin и cos. 45 градусов - это особый случай, когда sin и cos равны 1 / sqrt (2) , поэтому не имеет значения, в каком направлении вы их используете.

1
ответ дан 6 December 2019 в 12:46
поделиться

Назовите красную точку в точке ( 50, 250 ) A и точку в точке ( 200, 100 ) B.

Один из способов - сначала вычислить вектор AB, т.е.

v_AB = ( 200 - 50, 100 - 250 ) = ( 150, -150 )

Вы можете создать вектор под прямым углом к нему, поменяв местами компоненты и изменив знак одной из двух компонент. Таким образом,

v_AB_perp = ( 150, 150 )

- это вектор, повернутый путем вращения v_AB по часовой стрелке, когда вы смотрите на него на экране. Вы можете нормализовать его, чтобы получить единичный вектор, разделив на величину, т.е.

v_AB_perp_normalised = v_AB_perp / |v_AB_perp|

Чтобы получить желтые точки, просто умножьте это на 20 пикселей и добавьте/вычтите это к координатам A.

.
4
ответ дан 6 December 2019 в 12:46
поделиться

Это должно сработать (я просто буду ссылаться на крайнюю левую желтую точку, но в конце мы получим их координаты):

  1. Найдите наклон линии даны двумя красными точками.
  2. Найдите уравнение линии между желтой и красной точками (d2).
  3. Найдите координаты желтых точек, используя уравнение линии d2 и тот факт, что расстояние от самой нижней красной точки равно 20.

Для 1 :

Найдите точку наклон: m = (y1 - y2) / (x1 - x2) = (250 - 100) / (50 - 200) = 150 / -150 = -1

Для 2 :

Мы знаем, что d1 (линия между красными точками) перпендикулярна d2 (линия между красной и желтой точками), и поэтому произведение их наклонов должно быть - 1 . Следовательно, наклон d2 равен m = 1

Следовательно, уравнение выглядит следующим образом: d2: y - 250 = x - 50 => d2: y - x = 200

Для 3 :

Требуемая желтая точка лежит на прямой d2 , а расстояние от нее до самой нижней красной точки составляет 20 . Решите систему уравнений:

y - x = 200
(x - 50)^2 + (y - 250)^2 = 400

Вычисление становится довольно уродливым, но решение его с помощью математики дает:

{{x -> 35.8579, y -> 235.858}, {x -> 64.1421, y -> 264.142}}

Вот где лежат две ваши желтые точки!

Программно вы можете легко решить такую ​​систему, подставив y = 200 + x во второе уравнение, затем переместив все на одну сторону и решив его как квадратное уравнение.

2
ответ дан 6 December 2019 в 12:46
поделиться

Поскольку желтые точки находятся под прямым углом от красно-красной линии, вы можете использовать что-то более простое. Я не буду отвечать на весь вопрос, но попытаюсь дать несколько подсказок:

Игнорируя фактическое расстояние до желтых точек, представьте некоторые другие точки на той же линии NW-SE, на том же расстоянии, что и красная точка NE. Вектор к ней - это просто вектор к красной точке, повернутый на 90 градусов.

Поворот на 90 градусов можно сделать, поменяв местами координаты и инвертировав одну из них.

Получив это, переместите желтую точку в более близкое положение, масштабируя вектор на реальное расстояние (20).

2
ответ дан 6 December 2019 в 12:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: