public static IntersectionPointOptimized ( Vector3 start1, Vector3 dir1, Vector3 start2, Vector3 dir2 ) : Vector3 | ||
start1 | Vector3 | |
dir1 | Vector3 | |
start2 | Vector3 | |
dir2 | Vector3 | |
return | Vector3 |
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)); }
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)); }
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)); }
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)); }