0

我将从道歉开始,我正在努力表达这个问题,所以我将从我想要实现的目标开始。

我在 Raphael 中使用 Javascript。

所以,我试图存储一个点相对于多边形四个角的位置。多边形的对角可以看作在它们之间有一个轴,它总是与另一个轴成直角相交。多边形可以在任一轴上旋转和增长/缩小,但轴将保持直角。我希望该点在移动/伸展时保持在多边形上的同一位置。该点由用户单击多边形上的一个点来放置。

我希望能够获取鼠标单击的 X/Y 坐标,并将其转换为多边形内部轴的某个相对百分比或某些东西,这可能并不总是与浏览器的 X/Y 轴平行。我该怎么做?

这张图片可能有助于澄清我试图表达的想法。

在此处输入图像描述

绿点是我想存储多边形内相对位置的点。我有红色和蓝色角点的 X/Y 坐标。

4

1 回答 1

0

考虑连接两个红点的线是 X 轴,连接蓝点的线是 Y 轴;那么您可以将多边形中的任何点表示为“沿 X 很远,沿 Y 很远”。这让您有两个问题需要解决:

  1. 给定这五个点,绿点的“红蓝”坐标是多少?
  2. 给定四个点和 RB 值,绿点在哪里?

为此,您可以将沿红轴的点投影到蓝轴上,反之亦然。

让红点的坐标为(R1x, R1y)等。然后我们执行以下操作:

RdirX = R2x - R1x;
RdirY = R2y - R1y;
BdirX = B2x - B1x;
BdirY = B2y - B1y;

现在如果绿色坐标是(Gx, Gy)和“新”坐标(RBr, RBb),你有以下等式:

RBr*RdirX + RBb*BdirX = Gx
RBr*RdirY + RBb*BdirY = Gy

在这种形式下,它解决了问题的第二部分(从 RB 坐标回到欧几里得);要朝另一个方向发展,您需要为未知数 RBr 和 RBb 求解这些方程。我怀疑如果您将多边形的中心作为坐标系的原点,事情会更好。

我已经完整地写出了方程式,并创建了一张图片来展示这一切是如何运作的:

在此处输入图像描述
在此处输入图像描述

你应该可以从这里做...

于 2013-03-06T02:57:44.813 回答