IntersectionPointOptimized() public static method

public static IntersectionPointOptimized ( Vector3 start1, Vector3 dir1, Vector3 start2, Vector3 dir2 ) : Vector3
start1 Vector3
dir1 Vector3
start2 Vector3
dir2 Vector3
return Vector3
Ejemplo n.º 1
0
            public Vector3 Intersection(LocalAvoidance.HalfPlane hp)
            {
                Vector3 dir  = Vector3.Cross(this.normal, Vector3.up);
                Vector3 dir2 = Vector3.Cross(hp.normal, Vector3.up);

                return(Polygon.IntersectionPointOptimized(this.point, dir, hp.point, dir2));
            }
Ejemplo n.º 2
0
            public Vector3 Intersection(HalfPlane hp)
            {
                Vector3 tangent  = Vector3.Cross(normal, Vector3.up);
                Vector3 tangent2 = Vector3.Cross(hp.normal, Vector3.up);

                return(Polygon.IntersectionPointOptimized(point, tangent, hp.point, tangent2));
            }
Ejemplo n.º 3
0
            public override void TangentToTangent(List <AdvancedSmooth.Turn> turnList)
            {
                Vector3 dir    = Vector3.Cross(AdvancedSmooth.TurnConstructor.t1, Vector3.up);
                Vector3 vector = AdvancedSmooth.TurnConstructor.current - AdvancedSmooth.TurnConstructor.prev;
                Vector3 start  = vector * 0.5f + AdvancedSmooth.TurnConstructor.prev;

                vector = Vector3.Cross(vector, Vector3.up);
                bool flag;

                this.circleCenter = Polygon.IntersectionPointOptimized(AdvancedSmooth.TurnConstructor.prev, dir, start, vector, out flag);
                if (!flag)
                {
                    return;
                }
                this.gamma1    = base.Atan2(AdvancedSmooth.TurnConstructor.prev - this.circleCenter);
                this.gamma2    = base.Atan2(AdvancedSmooth.TurnConstructor.current - this.circleCenter);
                this.clockwise = !Polygon.Left(this.circleCenter, AdvancedSmooth.TurnConstructor.prev, AdvancedSmooth.TurnConstructor.prev + AdvancedSmooth.TurnConstructor.t1);
                double num = (!this.clockwise) ? base.CounterClockwiseAngle(this.gamma1, this.gamma2) : base.ClockwiseAngle(this.gamma1, this.gamma2);

                num = base.GetLengthFromAngle(num, (double)(this.circleCenter - AdvancedSmooth.TurnConstructor.current).magnitude);
                turnList.Add(new AdvancedSmooth.Turn((float)num, this, 0));
            }
Ejemplo n.º 4
0
            public override void TangentToTangent(List <Turn> turnList)
            {
                Vector3 preNormal = Vector3.Cross(t1, Vector3.up);

                //Debug.DrawLine (prev,prev + preNormal*10,Color.cyan);

                Vector3 dir = (current - prev);
                Vector3 pos = dir * 0.5F + prev;

                dir = Vector3.Cross(dir, Vector3.up);

                //Debug.DrawLine (prev,pos,Color.red);
                //Debug.DrawLine (pos,pos+dir*2,Color.red);

                bool didIntersect;

                circleCenter = Polygon.IntersectionPointOptimized(prev, preNormal, pos, dir, out didIntersect);

                //Debug.DrawLine (prev,circleCenter);
                //Debug.DrawLine (circleCenter,current);

                if (!didIntersect)
                {
                    return;
                }

                gamma1 = Atan2(prev - circleCenter);
                gamma2 = Atan2(current - circleCenter);

                clockwise = !Polygon.Left(circleCenter, prev, prev + t1);

                double beta = clockwise ? ClockwiseAngle(gamma1, gamma2) : CounterClockwiseAngle(gamma1, gamma2);

                beta = GetLengthFromAngle(beta, (circleCenter - current).magnitude);

                turnList.Add(new Turn((float)beta, this, 0));
            }