void ChangePolynomialtemplateDegree(int newDegree) { if (Selected) { if (newDegree < 1) { Console.WriteLine("polynomial template degree cannot be less than 1"); return; } Console.WriteLine("changing polynomial template degree to {0}", newDegree); nextSpecification = new BasicSpecification ( nextSpecification.CurveLength, nextSpecification.SegmentCount, new PolynomialFunctionTermCurveTemplate(newDegree), nextSpecification.CurveSpecifications ); RebuildCurveSpecification(); curveOptimizer.Submit(nextSpecification); } }
void ChangeCurveSegmentCount(int newSegmentCount) { if (Selected) { if (newSegmentCount < 1) { Console.WriteLine("segment count cannot be smaller than one!"); return; } Console.WriteLine("changing segment count to {0}", newSegmentCount); nextSpecification = new BasicSpecification ( nextSpecification.CurveLength, newSegmentCount, nextSpecification.SegmentTemplate, nextSpecification.CurveSpecifications ); RebuildCurveSpecification(); curveOptimizer.Submit(nextSpecification); } }
void CurveChanged(BasicSpecification newBasicSpecification, Curve newCurve) { basicSpecification = newBasicSpecification; curve = newCurve; Changed(); }
public CurveComponent(Component parent, OptimizationWorker optimizationWorker, Specification specification) : base(parent) { if (optimizationWorker == null) { throw new ArgumentNullException("optimizationWorker"); } this.curveOptimizer = new CurveOptimizer(optimizationWorker, specification); this.curveOptimizer.CurveChanged += CurveChanged; this.curveStartComponent = new FixedPositionComponent(this, this, 0); this.curveEndComponent = new FixedPositionComponent(this, this, 1); this.specificationComponents = new List <SpecificationComponent>(); this.segmentComponents = new List <SegmentComponent>(); nextSpecification = specification.BasicSpecification; curve = null; RebuildSegmentComponents(); curveOptimizer.Submit(nextSpecification); IEnumerable <SpecificationComponent> specificationComponents = ( from spec in nextSpecification.CurveSpecifications orderby spec.Position ascending group spec by spec.Position into specificationGroup select new SpecificationComponent(this, this, specificationGroup.Key, specificationGroup) ); foreach (SpecificationComponent component in specificationComponents) { AddSpecificationComponent(component); } }
void ChangeCurveLength(double newCurveLength) { nextSpecification = new BasicSpecification ( newCurveLength, nextSpecification.SegmentCount, nextSpecification.SegmentTemplate, nextSpecification.CurveSpecifications ); }
void RebuildCurveSpecification() { nextSpecification = new BasicSpecification ( nextSpecification.CurveLength, nextSpecification.SegmentCount, nextSpecification.SegmentTemplate, ( from specificationComponent in SpecificationComponents from specification in specificationComponent.Specifications select specification ) .ToArray() ); }
void Optimize(BasicSpecification basicSpecification) { if (specification == null) { specification = new Specification(basicSpecification); } // TODO: make sure the new curve resembles the old one, even when SegmentCount and/or SegmentTemplate are changed if (basicSpecification.SegmentCount != specification.BasicSpecification.SegmentCount || basicSpecification.SegmentTemplate != specification.BasicSpecification.SegmentTemplate) { specification = new Specification(basicSpecification); } specification = new Specification(basicSpecification, specification.Position); try { Stopwatch stopwatch = new Stopwatch(); stopwatch.Restart(); specification = optimizer.Normalize(specification); stopwatch.Stop(); Console.WriteLine("normalization: {0} s", stopwatch.Elapsed.TotalSeconds); stopwatch.Restart(); Kurve.Curves.Curve curve = new DiscreteCurve(optimizer.GetCurve(specification), (int)basicSpecification.CurveLength); stopwatch.Stop(); Console.WriteLine("discrete curve: {0} s", stopwatch.Elapsed.TotalSeconds); Application.Invoke ( delegate(object sender, EventArgs e) { if (CurveChanged != null) { CurveChanged(basicSpecification, curve); } } ); } catch (InvalidOperationException exception) { Terminal.Write(exception.Message, ConsoleColor.Red); Terminal.WriteLine(); } }
void AddCurve() { BasicSpecification basicSpecification = new BasicSpecification ( 100, 1, new PolynomialFunctionTermCurveTemplate(10), Enumerables.Create ( new PointCurveSpecification(0.0, new Vector2Double(300, 300)), new PointCurveSpecification(1.0, new Vector2Double(400, 300)) ) ); AddCurve(new CurveComponent(this, optimizationWorker, new Specification(basicSpecification))); }
public void Submit(BasicSpecification basicSpecification) { optimizationWorker.SubmitTask(this, curveOptimizer => curveOptimizer.Optimize(basicSpecification)); }