You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建几何体重心处的36等分圆周并投影点云节点?

点云节点投影至重心圆周的实现方法

一、创建重心处的圆周并划分为36段

由于你已将几何体重心移至坐标原点(0,0),圆周中心即为原点,具体步骤如下:

  • 确定圆周半径:建议取所有节点到原点的欧氏距离最大值,确保所有节点投影后均落在圆周上。计算方式为对每个节点(x,y),距离d = √(x² + y²),取所有d中的最大值作为半径R。
  • 计算等分角度:36段对应的角度间隔为360°/36 = 10°,转换为弧度是π/18。每个等分点的角度为θ_i = i*(2π/36),其中i从0到35。
  • 生成等分点坐标:每个等分点的坐标为(R*cosθ_i, R*sinθ_i)。

二、将节点投影至圆周

投影逻辑为:从原点出发,沿节点所在射线延伸至圆周,交点即为投影点,步骤如下:

  • 计算节点到原点的距离d = √(x² + y²);
  • 若节点在原点(d≈0),可指定任意一个圆周等分点作为投影结果(例如第一个等分点);
  • 非原点节点的投影坐标为((x/d)*R, (y/d)*R),即沿径向将节点缩放至圆周上。

代码实现示例(Python)

import math

# 用户提供的节点数据
nodes = [
    (0, -1.0, -2.0),
    (1, -1.0, -1.0),
    (2, -1.0, 0.0),
    (3, -1.0, 1.0),
    (4, -2.0, 1.0),
    (5, -2.0, 2.0),
    (6, -1.0, 2.0),
    (7, 0.0, 2.0),
    (8, 1.0, 2.0),
    (9, 2.0, 2.0),
    (10, 2.0, 1.0),
    (11, 1.0, 1.0),
    (12, 0.0, 1.0),
    (13, 0.0, 0.0),
    (14, 0.0, -1.0),
    (15, 0.0, -2.0),
]

# 1. 计算圆周半径R(取节点到原点的最大距离)
max_distance = 0.0
for _, x, y in nodes:
    dist = math.hypot(x, y)
    if dist > max_distance:
        max_distance = dist
R = max_distance

# 2. 生成36个圆周等分点
num_segments = 36
circle_points = []
for i in range(num_segments):
    angle = 2 * math.pi * i / num_segments
    x = R * math.cos(angle)
    y = R * math.sin(angle)
    circle_points.append((x, y))

# 3. 投影所有节点到圆周
projected_nodes = []
for node_num, x, y in nodes:
    dist = math.hypot(x, y)
    if dist < 1e-9:  # 处理原点处的节点
        proj_x, proj_y = circle_points[0]
    else:
        proj_x = (x / dist) * R
        proj_y = (y / dist) * R
    projected_nodes.append((node_num, proj_x, proj_y))

# 输出示例结果
print("圆周等分点(前5个):")
for idx, (x, y) in enumerate(circle_points[:5], 1):
    print(f"第{idx}个:({x:.4f}, {y:.4f})")

print("\n节点投影结果(前5个):")
for node_num, x, y in projected_nodes[:5]:
    print(f"节点{node_num}:({x:.4f}, {y:.4f})")

内容的提问来源于stack exchange,提问作者Urvish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 08:09:16