public IEnumerable <Annotation> InferAnnotations(NewPrimitive toBeSnapped, SnappedPrimitive toBeAnnotated) { // we skip orthogonality inference for spheres if (toBeSnapped is NewSphere) { return(Enumerable.Empty <Annotation>()); } var curvesToSkip = toBeAnnotated.FeatureCurves.Concat(GetSphereFeatureCurves()).ToArray(); var candidates = from firstCurve in toBeAnnotated.FeatureCurves from secondCurve in sessionData.FeatureCurves.Except(curvesToSkip) where AreGoodCandidates(firstCurve, secondCurve) select Tuple.Create(firstCurve, secondCurve); if (candidates.Any()) { var bestCandidate = candidates.Minimizer(pair => DistanceBetweenCurves(pair.Item1, pair.Item2)); var newFeatureCurve = bestCandidate.Item1; var existingFeatureCurve = bestCandidate.Item2; Annotation parallelism = new Parallelism { Elements = new FeatureCurve[] { newFeatureCurve, existingFeatureCurve } }; return(UtilsEnumerable.Singleton(parallelism)); } else { return(Enumerable.Empty <Annotation>()); } }
public LinesIntersection2?Intersects(Ray2 ray, out Parallelism parallelism) { //http://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect var p = Position; var r = Direction; var q = ray.Position; var s = ray.Direction; // It isn't maths if the variable names make any sense // ReSharper disable InconsistentNaming var RxS = r.Cross(s); var QmP = q - p; // ReSharper restore InconsistentNaming if (Math.Abs(RxS - 0) < 0.001) { // ReSharper disable InconsistentNaming var QmPxR = QmP.Cross(r); // ReSharper restore InconsistentNaming parallelism = Math.Abs(QmPxR - 0) < 0.001 ? Geometry.Parallelism.Collinear : Geometry.Parallelism.Parallel; return(null); } var t = QmP.Cross(s) / RxS; var u = QmP.Cross(r) / RxS; var point = p + (t * r); parallelism = Geometry.Parallelism.None; return(new LinesIntersection2(point, t, u)); }
private static void ExecuteTests() { ITimes times = new Times(1); IParallelism parallelism = new Parallelism(2); ITestSuit suit = Program.CreateSuit(); IReport report = suit.Execute(times, parallelism); report.Print(new ConsolePrinter()); }
public LinesIntersection2?Intersects(Ray2 ray, out Parallelism parallelism) { var intersection = LongLine.Intersects(ray, out parallelism); if (!intersection.HasValue) { return(null); } if (intersection.Value.DistanceAlongA <= 0 || intersection.Value.DistanceAlongA >= 1) { return(null); } return(intersection); }
private Term[] GetConcreteAnnotationTerm(Parallelism parallelism) { var terms = new List <Term>(); if (parallelism.Elements.Length >= 2) { var normals = from elem in parallelism.Elements select elem.Normal; foreach (var normalsPair in normals.SeqPairs()) { var n1 = normalsPair.Item1; var n2 = normalsPair.Item2; terms.AddRange(VectorParallelism(n1, n2)); } } return(terms.ToArray()); }
public LinesIntersection2?Intersects(LineSegment2 segment, out Parallelism parallelism) { var intersection = LongLine.Intersects(segment.LongLine, out parallelism); if (!intersection.HasValue) { return(null); } if (intersection.Value.DistanceAlongA < 0 || intersection.Value.DistanceAlongA > 1) { return(null); } if (intersection.Value.DistanceAlongB < 0 || intersection.Value.DistanceAlongB > 1) { return(null); } return(intersection); }
private Term[] GetConcreteAnnotationTerm(Parallelism parallelism) { throw new NotImplementedException();// we still don't handle parallelism }
static void Main(string[] args) { var parallelism = new Parallelism(); parallelism.Test(); }
public override string ToString() => "Local Environment (parallelism = " + (Parallelism == ExecutionConfig.DefaultParallelism ? "default" : Parallelism.ToString()) + ").";
public LinesIntersection2? Intersects(LineSegment2 segment, out Parallelism parallelism) { var intersection = LongLine.Intersects(segment.LongLine, out parallelism); if (!intersection.HasValue) return null; if (intersection.Value.DistanceAlongA <= 0 || intersection.Value.DistanceAlongA >= 1) return null; if (intersection.Value.DistanceAlongB <= 0 || intersection.Value.DistanceAlongB >= 1) return null; return intersection; }
public LinesIntersection2? Intersects(Ray2 ray, out Parallelism parallelism) { var intersection = LongLine.Intersects(ray, out parallelism); if (!intersection.HasValue) return null; if (intersection.Value.DistanceAlongA <= 0 || intersection.Value.DistanceAlongA >= 1) return null; return intersection; }
public LinesIntersection2? Intersects(Ray2 ray, out Parallelism parallelism) { //http://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect var p = Position; var r = Direction; var q = ray.Position; var s = ray.Direction; // It isn't maths if the variable names make any sense // ReSharper disable InconsistentNaming var RxS = r.Cross(s); var QmP = q - p; // ReSharper restore InconsistentNaming if (Math.Abs(RxS - 0) < 0.001) { // ReSharper disable InconsistentNaming var QmPxR = QmP.Cross(r); // ReSharper restore InconsistentNaming parallelism = Math.Abs(QmPxR - 0) < 0.001 ? Geometry.Parallelism.Collinear : Geometry.Parallelism.Parallel; return null; } var t = QmP.Cross(s) / RxS; var u = QmP.Cross(r) / RxS; var point = p + (t * r); parallelism = Geometry.Parallelism.None; return new LinesIntersection2(point, t, u); }