1

编辑 - 感谢大家的所有答案。我想我不小心把你带错了,因为下图中的正方形应该是一个矩形(我看到你们中的大多数人都在引用正方形,这似乎会让我的生活更轻松)。此外,x/y 线可以向任何方向移动,因此红点并不总是位于顶部 y 边界。我最初打算使用 ay = mx + b 解决方案,但后来我被困在试图弄清楚我是如何知道是插入 x 还是 y (显然必须知道其中一个)。

我有一个非常简单的问题(我认为),由于某种原因,我目前正在努力解决。我试图在我的游戏中使用一种小地图,它在视图周边显示符号,指向屏幕外的目标。

无论如何,我试图找到红点的值(而黑色边框和绿色的一切都是已知的):

在此处输入图像描述

这似乎是简单的三角学,但由于某种原因,我无法理解它。我只需要找到从绿点到红点的“新”x 值,然后我可以利用基本数学来获得红点,但是我如何找到新的 x 让我感到困惑。

提前致谢!

4

3 回答 3

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
于 2012-04-28T23:53:00.350 回答
2

让我们称正方形的一侧的长度l。线的斜率为-y/x。这意味着,如果您沿着这条线移动y并向正方形的顶部上升一段距离,那么您将x向左移动一段距离。但由于绿点在广场的中心,你只能上升l/2。您可以将其表示为一个比率:

    -y    -l /2
    ——— = ———
     xd      _

d您将向左移动的距离是多少。求解d,我们有

    d = xl /2 y

所以如果绿点在(0, 0),红点在

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

于 2012-04-28T23:53:02.957 回答
1

您所需要的只是正方形的角度和宽度w

如果绿点在(0,0),则角度为a = atan(y/x),点的 y 坐标为w/2,因此点的 x 坐标为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,否则您要反转xand y

于 2012-04-28T23:43:54.727 回答