0

我尝试根据电枢的三个点来计算磁极位置。

开始时,我计算我的杆应始终面向的方向。

然后在每一帧上,我使用我的基本方向重新计算该方向来纠正它。

当我的层次结构的根、中间罐和尖端在条纹线上对齐时,问题就开始了。

在此处输入图像描述

计算出的方向向量以随机方式指向。

负责进行该计算的代码如下所示:

private Vector3 CalculatePoleDirection(
    Vector3 rootTransformPosition, Vector3 middleTransformPosition, Vector3 tipTransformPosition, Vector3 direction)
{
    var middlePointDirection = CalculateMiddleDirection(
        rootTransformPosition, middleTransformPosition, tipTransformPosition);
    m_midPoint = middlePointDirection.Item2;
    
    var dot = Vector3.Dot(middlePointDirection.Item1, direction);
    Debug.Log(dot);
    var deltaRotation = Quaternion.FromToRotation(middlePointDirection.Item1, direction);
    
    //m_calculatedDirection = m_root.rotation * middlePointDirection; 
    var m_calculatedDirection = Quaternion.Inverse(deltaRotation) * direction;
    //Inverting direction to always point in the same way.
    return dot > 0 ? m_calculatedDirection : -m_calculatedDirection;
}

private (Vector3, Vector3) CalculateMiddleDirection(
    Vector3 rootTransformPosition, Vector3 middleTransformPosition, Vector3 tipTransformPosition)
{
    var rootToTip = tipTransformPosition - rootTransformPosition;
    var rootToMiddle = middleTransformPosition - rootTransformPosition;
    rootToTip.Normalize();

    var dot = Vector3.Dot(rootToMiddle, rootToTip);

    rootToMiddle.Normalize();

    var middle = rootToTip * dot;

    var middlePosition = rootTransformPosition + middle;
    var middleToMiddlePoint = middleTransformPosition - middlePosition;
    
    middleToMiddlePoint.Normalize();
    return (middleToMiddlePoint, middlePosition);
}

我能做些什么来防止这种情况发生?

4

0 回答 0