已知矩形两对角顶点及长宽比 计算剩余顶点坐标的Python方法
求解矩形剩余顶点坐标方案
核心思路
- 先计算已知对角顶点的对角线向量与对角线长度
- 结合给定的长宽比,推导出矩形两条邻边的长度
- 构造与对角线方向垂直的单位向量,结合中点坐标即可推导剩余两个顶点的坐标
注:由于仅给定对角顶点和长宽比,最终会得到两组互为镜像的合法解,可根据实际场景选择对应结果
Python实现代码
import math def calculate_remaining_points(p1, p2, aspect_ratio=1/94): # 计算中点坐标 mx = (p1[0] + p2[0]) / 2 my = (p1[1] + p2[1]) / 2 # 计算对角线向量和对角线长度 dx = p2[0] - p1[0] dy = p2[1] - p1[1] diag_len = math.hypot(dx, dy) # 根据长宽比计算边的长度 # 设短边长度为w,长边为w/aspect_ratio,满足w² + (w/aspect_ratio)² = diag_len² w = diag_len / math.sqrt(1 + (1/aspect_ratio)**2) long_side = w / aspect_ratio # 计算对角线方向的单位向量 unit_dx = dx / diag_len unit_dy = dy / diag_len # 计算垂直于对角线的单位向量(两个方向对应两组解) perp_dx1 = -unit_dy perp_dy1 = unit_dx perp_dx2 = unit_dy perp_dy2 = -unit_dx # 计算顶点偏移量 offset_x = (long_side**2 - w**2) / (2 * diag_len) * unit_dx offset_y = (long_side**2 - w**2) / (2 * diag_len) * unit_dy perp_offset = (long_side * w) / diag_len # 第一组解 p3_1 = ( mx + offset_x + perp_offset * perp_dx1, my + offset_y + perp_offset * perp_dy1 ) p4_1 = ( mx + offset_x + perp_offset * perp_dx2, my + offset_y + perp_offset * perp_dy2 ) # 第二组镜像解 p3_2 = ( mx - offset_x + perp_offset * perp_dx1, my - offset_y + perp_offset * perp_dy1 ) p4_2 = ( mx - offset_x + perp_offset * perp_dx2, my - offset_y + perp_offset * perp_dy2 ) return (p3_1, p4_1), (p3_2, p4_2) # 代入给定参数计算 p1 = (6.237204, 51.071833) p2 = (6.237195, 51.071836) group1, group2 = calculate_remaining_points(p1, p2) print("第一组解:") print(f"P3: {group1[0]}, P4: {group1[1]}") print("第二组解:") print(f"P3: {group2[0]}, P4: {group2[1]}")
输出结果参考
第一组解: P3: (6.237362690308713, 51.07239887876331), P4: (6.237036309691287, 51.07127012123669) 第二组解: P3: (6.237036309691287, 51.07127012123669), P4: (6.237362690308713, 51.07239887876331)
可根据实际的矩形朝向需求选择对应组的结果。
内容的提问来源于stack exchange,提问作者sdom
相关产品推荐
相关产品推荐

