gpt4 book ai didi

c++贝塞尔曲线切线方向问题

转载 作者:行者123 更新时间:2023-11-28 06:28:37 25 4
gpt4 key购买 nike

<分区>

在使用 (x,z) 而不是 (x,y) 的 3D 空间内沿着我的三次贝塞尔曲线移动时,我遇到了有关切线的问题。 已添加曲线图像。

当实体击中图像上指示的红线 时会出现问题。切线从 0.0 到 1.0 逐渐开始,然后碰到红线并开始从 1.0 到 0.0 逐渐减小,导致实体的方向翻转。

目前这个片段负责切线:

const Vector3 Class::getTangent(const float s) const
{
const float t { 1 - s };

return (3 * t * t * (points.at(1) - points.at(0)) +
6 * s * t * (points.at(2) - points.at(1)) +
3 * s * s * (points.at(3) - points.at(2)));
}

然后我将这个函数用于:

Vector3 firstDerivative = curve.getTangent(segment);
firstDerivative.normalise();

Vector3 normal = firstDerivative.crossProduct(Vector3(0, 0, 1)); // Z = forward
normal.normalise();

Vector3 b = firstDerivative.crossProduct(normal);
b.normalise();

然后我简单地使用 b 设置实体沿曲线的方向。当达到翻转实体的点时,我确实通过将 b 的符号切换为 -b 创建了一个简单/肮脏的修复。现在尽管“修复”了这个问题,但我相信如果曲线发生变化,修复会在以后引起问题。

因此,如果有人能发现我可能出错的地方或我可能需要做些什么来解决这个问题,我们将不胜感激。 您是否也可以通过伪代码或 C++ 代码提供针对给定问题的解决方案示例。

enter image description here

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com