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

基于贝塞尔曲线点生成2D线段:旋转计算异常问题排查

基于贝塞尔曲线点生成2D线段的旋转异常问题

现有实现流程

  1. 生成z轴方向的线段边界点
    以贝塞尔曲线上的点pos[i]为基准,在z轴方向生成线段的两个端点:

    glm::vec3    p1 = pos[i];
    p1.z = p1.z + (size / 2);
    
    glm::vec3    p2 = pos[i];
    p2.z = p2.z - (size / 2);
    
  2. 计算旋转角度
    以贝塞尔曲线上前后点的夹角作为旋转角度,其中depForward为glm::vec3(1.0f, 0.0f, 0.0f):

    glm::vec3 normForwardUnit = normalize(p2 - p1);
    float angle = (acos(dot(depForward, normForwardUnit)));
    
  3. 围绕主点旋转边界点
    对生成的边界点进行顺时针旋转(pm为待旋转点,pf为固定点):

    glm::vec3   rotP = glm::vec3(0.0f, 0.5f, 0.0f);
    
    float   co = cos(angle);
    float   si = sin(angle);
    
    // CLOCKWISE
    rotP.x = (pf.x - pm.x) * co + (pf.z - pm.z) * si + pm.x;
    rotP.z = -(pf.x - pm.x) * si + (pf.z - pm.z) * co + pm.z;
    

问题现状

部分线段显示正常,但整体旋转结果异常,错误表现与线段朝向直接相关。已尝试以下调试手段但未解决问题:

  • 将角度归一化至不同范围
  • 使用atan2替代acos计算角度
  • 替换为逆时针旋转公式

错误示例:线段朝向混乱,无法贴合贝塞尔曲线走向
正确示例:线段沿贝塞尔曲线均匀分布,整体朝向一致


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:05:12