2012-04-28 8 views
1

EDIT - Спасибо всем за ответы. Я думаю, что я случайно привел вас немного неправильно, поскольку квадрат на картинке ниже должен быть прямоугольником (я вижу, что большинство из вас ссылаются на квадраты, которые, похоже, облегчили бы мою жизнь). Кроме того, линии x/y могут идти в любом направлении, поэтому красная точка не всегда будет на верхней границе y. Я изначально собирался для решения y = mx + b, но затем я застрял, пытаясь понять, как я знаю, следует ли подключать x или y (один из них должен быть известен, очевидно).Простая тригонометрия?

У меня очень простой вопрос (я думаю), с которым я в настоящее время борется по какой-то причине. Я пытаюсь создать в моей игре мини-карту, которая отображает символы по периметру представления, указывая на цели вне экрана.

Во всяком случае, я пытаюсь найти значение красной точки (в то время как черные границы и все в зеленый цвет, как известно):

enter image description here

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

Заранее благодарен!

+1

Возможно, вы захотите опубликовать этот вопрос здесь: http://math.stackexchange.com – dez

+1

Это на самом деле проще, чем это. Все, что вам нужно, это уравнение для линии от x до y (что-то вроде y = mx + b, но я уверен, что вы это знали) и значение y границы. Подключите значение y и решите для x. – jpm

+0

@jpm: проще, чем это: D –

ответ

1

Все, что вам нужно, это угол и ширина квадрата w.

Если зеленая точка находится на (0,0), то угол a = atan(y/x), у-координата точки является w/2, и, следовательно, х-координата точки является tan(1/a) * (w/2). Обратите внимание, что tan(1/a) == pi/2 - tan(a), или, другими словами, угол, который вы действительно хотите подключиться к tan, находится за пределами коробки.

Редактировать: да, это можно сделать и без триггера. Все, что вам нужно, это интерполяция x-координаты точки на линии. Итак, вы знаете, что координата y равна w/2, тогда координата x равна (w/2) * x/y. Но будьте осторожны, какой квадрант квадрата вы работаете. Эта формула действительна только для -y<x<y, в противном случае вы хотите изменить x и y.

+1

Довольно уверен, что это можно сделать с еще меньшей (read: no) тригонометрией. – jpm

+1

Да, я думаю, что решение, использующее аналогичные треугольники, было бы более элегантным, поскольку оно полностью устраняет тригонометрию, и наиболее сложной операцией, в которой он нуждается, является деление. –

4
scale = max(abs(x), abs(y)) 
x = x/scale 
y = y/scale 

Это простой случай для квадрата от (-1, -1) до (1, 1). Если вы хотите квадрат разного размера, умножьте координаты на sidelen/2.

Если вы хотите прямоугольник вместо квадрата, используйте следующую формулу. (Это еще одно решение произвольно размера квадратной версии)

scale = max(abs(x)/(width/2), abs(y)/(height/2)) 
x = x/scale 
y = y/scale 
+1

+ 1 ... но это для квадрата единицы (ширина = 2), вы должны умножить на половину размерности квадрата в конце. – Potatoswatter

+0

@Potatoswatter: Спасибо. Обновлено. –

+0

Не думайте, что это упрощает красиво, используя прямоугольник вместо квадрата, не так ли? (Или что-то подобное этому методу?) – user1359417

2

Давайте назовем длину одной стороны квадрата l. Наклон линии равен -y/x. Это означает, что если вы двигаетесь вдоль линии и поднимаетесь на расстояние y в начало страницы, тогда вы будете перемещать дистанцию ​​x Слева. Но поскольку зеленый пункт находится в центре площади, вы можете подняться только l/2.Вы можете выразить это как отношение:

 
    -y -l/2 
    ——— = ——— 
    x  d 

Где d это расстояние, которое вы будете двигаться влево. Решение для d, мы имеем

 
    d = xl/2y 

Так что, если зеленая точка на (0, 0), красная точка находится на

(-l/2, xl/2y)
.

+0

+1 для формата fu – Potatoswatter

+0

@Potatoswatter: Спасибо. Это было весело. :-) Есть ли хороший способ поместить шрифт фиксированной ширины в строку с регулярным текстом и выделить курсивом только некоторые символы фиксированной ширины? Я был бы еще счастливее, если бы фон был белым, а не серым. –

+0

Нет, такое форматирование доступно только на http://math.stackexchange.com – Potatoswatter

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