【问题标题】:Point positioning inside rectangle with only two known vertexes只有两个已知顶点的矩形内的点定位
【发布时间】:2020-04-14 14:01:26
【问题描述】:

我正在开发一个 js 小部件,但遇到了一个定位问题,我似乎无法用我有限的几何知识或在 Wikipedia/google 的帮助下解决。

我有一个四边形矩形,它以一个角度定位。我知道它的两个相反的顶点宽高比。上面有一点,我也知道它的坐标。 我需要找出该点距矩形边有多远(以宽度/高度的 %s 为单位)。有可能这样做吗?

【问题讨论】:

  • 有两个相同大小的矩形可以适合这两个点。如果没有一些额外的信息,例如矩形左上角的点 1,您将有两个解决方案。如果您知道该点在哪个角,则两点之间的距离给出直角三角形的hypot,其长度为 W 和 H。adjopp。从那里您可以求解所有兴趣点。

标签: math geometry trigonometry


【解决方案1】:

有两个角P1 = (x1,y1)P2 = (x2,y2)和点Q,可以求对角线长度

dx = (x2 - x1)
dy = (y2 - y1) 
dlen = sqrt(dx^2 + dy^2)

和单位方向向量

dx = dx / dlen
dy = dy / dlen

矩形的中心

cx = x1 + dx/2
cy = y1 + dy/2

宽度和高度(已知r = w/h 比率)

w = dlen / sqrt(1 + r^2)
h = w / r 

现在我们需要长度边的方向w。请注意,给定的信息不允许从两种可能的情况中选择精确的矩形方向。

对角线和边之间的角度

sina = r / sqrt(1 + r^2)
cosa = 1 / sqrt(1 + r^2)

侧向矢量

wx = dx * cosa - dy * sina
wy = dx * sina  + dy * cosa

对于第二个方向

wx' = dx * cosa + dy * sina
wy' = -dx * sina + dy * cosa

第二个边向量

hx = -wy
hy = wx

现在我们可以使用点积计算点 p 到边 WH 的投影长度

qx = q.x - x1
qy = q.y - y1

qw = qx * wx + qy * wy
qh = qx * hx + qy * hy

最后一个值是在W-H 基础上的坐标,因此值qw 从“左侧”点的0 到“右侧”点的w 变化。您可以将这些值除以wh 以获得百分比值。

再次注意 - 有两个可能的矩形和对应的点Q的两个位置

【讨论】:

    猜你喜欢
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    相关资源
    最近更新 更多