已知矩形两点及宽度 求解任意旋转矩形的剩余两个顶点
任意旋转矩形未知顶点坐标求解方法

前置已知条件
- 两个黑色标注的矩形顶点坐标:记为$P_1(x_1,y_1)$、$P_2(x_2,y_2)$
- 矩形宽度(红色标注边长):记为$w$
- 两点属性:$P_1$与$P_2$属于矩形的同一边或对边
场景分组求解
分组1:两点属于矩形同一边
首先计算两点连线的边参数:
- 边向量:$\vec{v} = (x_2 - x_1, y_2 - y_1)$
- 边长度:$L = \sqrt{(x_2-x_1)^2 + (y_2-y_1)^2}$
- 边的单位方向向量:$\vec{u} = (\frac{x_2-x_1}{L}, \frac{y_2-y_1}{L})$
- 垂直于该边的两组单位法向量(对应矩形向边两侧延伸的两种场景):
- 方向1:$\vec{n_1} = (-u_y, u_x)$
- 方向2:$\vec{n_2} = (u_y, -u_x)$
对应两组黄色顶点坐标:
- 沿$\vec{n_1}$延伸:$P_3 = P_1 + w \times \vec{n_1}$,$P_4 = P_2 + w \times \vec{n_1}$
- 沿$\vec{n_2}$延伸:$P_3 = P_1 + w \times \vec{n_2}$,$P_4 = P_2 + w \times \vec{n_2}$
分组2:两点属于矩形对边
此时两点连线为矩形对角线,先计算基础参数:
- 对角线长度:$D = \sqrt{(x_2-x_1)^2 + (y_2-y_1)^2}$
- 矩形另一条边长:$h = \sqrt{D^2 - w^2}$
- 对角线中点坐标:$M(\frac{x_1+x_2}{2}, \frac{y_1+y_2}{2})$
- 对角线单位方向向量:$\vec{u_d} = (\frac{x_2-x_1}{D}, \frac{y_2-y_1}{D})$
- 垂直于对角线的两组单位法向量(对应两种矩形排布场景):
- 方向1:$\vec{n_1} = (-u_{d,y}, u_{d,x})$
- 方向2:$\vec{n_2} = (u_{d,y}, -u_{d,x})$
对应两组黄色顶点坐标:
- 沿$\vec{n_1}$排布:
$P_3 = M + \frac{h}{2} \times \vec{n_1} + \frac{w}{2} \times \vec{u_d}$
$P_4 = M - \frac{h}{2} \times \vec{n_1} - \frac{w}{2} \times \vec{u_d}$ - 沿$\vec{n_2}$排布:
$P_3 = M + \frac{h}{2} \times \vec{n_2} + \frac{w}{2} \times \vec{u_d}$
$P_4 = M - \frac{h}{2} \times \vec{n_2} - \frac{w}{2} \times \vec{u_d}$
以上四种求解结果完全覆盖示意图中的所有排布场景,实际使用时可根据所需矩形朝向选择对应的法向量方向即可。
内容的提问来源于stack exchange,提问作者JM1
相关产品推荐
相关产品推荐

