我有一个与此代码相关的问题:
t = -20:0.1:20; 
plot3(zeros(size(t)),t,-t.^2);
grid on
hold on
i = 1;
h = plot3([0 0],[0 t(i)],[0 -t(i)^2],'r');
h1 = plot3([-1 0],[0 0],[-400 -200],'g');
for(i=2:length(t))
    set(h,'xdata',[-1 0],'ydata',[0 t(i)],'zdata',[-400 -t(i)^2]);    
    pause(0.01);
end在这段代码中,我绘制了两条相交线。H1和H2。H1是固定的,H2作为时间的函数移动。在本例中,H2碰巧跟踪一条抛物线,但它的运动可能是任意的。
对于线H2的每个位置,如何计算并绘制这两条相交线之间的角度的平分线?我希望在图中看到平分线和H2线同时移动。
解决H2的一个位置的这个问题就足够了,因为对于H2相对于H1的所有方向都是相同的过程。
发布于 2020-09-04 12:32:21
我只使用以下代码:
对V进行标准化,然后执行A+V* length,以获得从公用点开始的所需长度的线段。
(请注意,此方法不适用于沿线的3个点来生成垂直平分线,在这种情况下,它将生成一个没有长度的向量)
我已经添加了一个C#实现(在XZ平面中使用Unity3Dmatlab结构),它可以处理垂直平分线和反射平分线,以防有人知道Vector3会翻译它。
    public Vector3 GetBisector(Vector3 center, Vector3 first, Vector3 second)
    {
        Vector3 firstDir = (first - center).normalized;
        Vector3 secondDir = (second - center).normalized;
        Vector3 result = ((firstDir + secondDir) * 0.5f).normalized;
        if (IsGreaterThan180(-firstDir, secondDir))
        {
            // make into a reflex vector
            (result.x, result.z) = (-result.x, -result.z);
        }
        if (result.sqrMagnitude < 0.99f)
        {
            // we have a colinear set of lines.
            // return the perpendicular bisector.
            result = Vector3.Cross(Vector3.up, -firstDir).normalized;
        }
        return result;
    }
    bool IsGreaterThan180(Vector3 dir, Vector3 dir2)
    {
        // < 0.0 for clockwise ordering
        return (dir2.x * dir.z - dir2.z * dir.x) < 0.0f;
    }还要注意,返回的二分线是一个单位长度的向量。使用“中心+平分线*长度”可以将其放入worldspace。
https://stackoverflow.com/questions/3921817
复制相似问题