基于贝塞尔曲线点生成2D线段:旋转计算异常问题排查
基于贝塞尔曲线点生成2D线段的旋转异常问题
现有实现流程
生成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);计算旋转角度
以贝塞尔曲线上前后点的夹角作为旋转角度,其中depForward为glm::vec3(1.0f, 0.0f, 0.0f):glm::vec3 normForwardUnit = normalize(p2 - p1); float angle = (acos(dot(depForward, normForwardUnit)));围绕主点旋转边界点
对生成的边界点进行顺时针旋转(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
相关产品推荐
相关产品推荐

