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

3D旋转后曲线长度不一致的原因排查

问题根源:旋转变换代码逻辑错误

你的曲线长度差异完全是因为3D转换时的变换公式写错了,根本不是旋转矩阵的拉伸问题——你写的变换根本不是旋转操作,而是错误的线性变换,直接导致坐标被不合理拉伸。

错误代码的核心问题

看你3D转换的这段代码:

xs = (x_max * math.cos(np.radians(DIR))) - (x_max * math.sin(np.radians(DIR))) 
ys = (x_max * math.sin(np.radians(DIR))) + (x_max* math.cos(np.radians(DIR))) 

正确的2D平面旋转公式是针对每个(x,y)点,绕原点旋转θ角后的新坐标为:

x' = x * cosθ - y * sinθ
y' = x * sinθ + y * cosθ

但你代码里把公式中的y_max全部替换成了x_max,相当于只对x坐标做了两次缩放组合,完全偏离了旋转的逻辑。这种错误变换会大幅拉伸坐标,自然会让曲线长度异常增大。

修正后的代码示例

根据你的需求,分两种常见场景修正:

  1. 把原始2D曲线(x_max, y_max)旋转后映射到3D的XY平面(z轴为0):
DIR = 297.72642328058686
theta = np.radians(DIR)
cos_theta = math.cos(theta)
sin_theta = math.sin(theta)

# 正确的2D旋转公式
xs = x_max * cos_theta - y_max * sin_theta
ys = x_max * sin_theta + y_max * cos_theta
zs = np.zeros_like(x_max)  # 保持在XY平面,z设为0
  1. 把原始2D曲线的y坐标作为3D的z坐标,同时将x坐标旋转到XY平面:
DIR = 297.72642328058686
theta = np.radians(DIR)
cos_theta = math.cos(theta)
sin_theta = math.sin(theta)

# x轴坐标旋转到XY平面,原始y作为z轴
xs = x_max * cos_theta
ys = x_max * sin_theta
zs = y_max

效果验证

旋转属于保距变换,修正后的代码计算出的曲线长度会和2D场景下的21.31左右完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:32:16