private void DrawHermiteInterpolatedPoints(HermiteInterpolation HermiteInterpolator) { foreach (Point hermiteInterpolatedPoint in HermiteInterpolator.interpolatedSegmentsOfPoints) { InterpolationChart.Series[2].Points.AddXY(hermiteInterpolatedPoint.x, hermiteInterpolatedPoint.y); } }
public InterpolationForm() { InitializeComponent(); DrawDefaultPoints(); LineInterpolation LineInterpolator = new LineInterpolation(); DrawLineInterpolatedPoints(LineInterpolator); HermiteInterpolation HermiteInterpolator = new HermiteInterpolation(); DrawHermiteInterpolatedPoints(HermiteInterpolator); }
internal new void Initialise(List <CamNode> points, int loops, CamTarget target) { if (target == null) { throw new Exception("No target found"); } var center = target.GetPosition(); if (center != null) { points.Add(points[0]); _target = target; var firstPoint = new Vec3d(points[0].X, points[0].Y, points[0].Z); var centerPoint = new Vec3d(center.X, center.Y, center.Z); _sphereOrigin = new Vec3d(firstPoint.X, firstPoint.Y, firstPoint.Z); _sphereOrigin.Sub(centerPoint); _radius = _sphereOrigin.Length(); var vecs = new List <double>(); var times = new List <double> { 0.0 }; vecs.Add(firstPoint.Y); var newPointsSorted = new List <CamNode> { points[0] }; for (var i = 1; i < points.Count - 1; i++) { var point = new Vec3d(points[i].X, firstPoint.Y, points[i].Z); point.Sub(centerPoint); var dot = point.Dot(_sphereOrigin); var det = ((point.X * _sphereOrigin.Z) - (point.Z * _sphereOrigin.X)); var angle = Math.Atan2(det, dot) * GameMath.RAD2DEG; if (angle < 0) { angle += 360; } var time = angle / 360; for (var j = 0; j < times.Count; j++) { if (times[j] > time) { times.Add(time); vecs.Add(points[i].Y); newPointsSorted.Add(points[i]); break; } } newPointsSorted.Add(points[i]); times.Add(time); vecs.Add(points[i].Y); } if (loops == 0) { newPointsSorted.Add(newPointsSorted[0].Clone()); } times.Add(1D); vecs.Add(firstPoint.Y); _yAxis = new HermiteInterpolation(times.ToArray(), vecs.ToArray()); base.Initialise(times.ToArray(), newPointsSorted, loops, target); } else { throw new Exception("Invalid target"); } }
protected void Initialise(double[] times, List <CamNode> points, int loops, CamTarget target) { if (points.Count == 1) { throw new CamStudioException("At least two points are required"); } var iterations = loops == 0 ? 1 : loops == 1 ? 2 : 3; _sizeOfIteration = 1D / iterations; var size = points.Count * iterations; if (iterations > 1) { size++; } var xPoints = new double[size]; var yPoints = new double[size]; var zPoints = new double[size]; var yawPoints = new double[size]; var pitchPoints = new double[size]; var rollPoints = new double[size]; var fovPoints = new double[size]; var saturationPoints = new double[size]; var sepiaPoints = new double[size]; var newTimes = new double[size]; for (var j = 0; j < iterations; j++) { if (times != null) { for (var i = 0; i < times.Length; i++) { var index = i + points.Count * j; if (index < size) { newTimes[index] = times[i] * _sizeOfIteration + _sizeOfIteration * j; } } } for (var i = 0; i < points.Count; i++) { xPoints[i + j * points.Count] = points[i].X; yPoints[i + j * points.Count] = points[i].Y; zPoints[i + j * points.Count] = points[i].Z; yawPoints[i + j * points.Count] = points[i].Yaw; pitchPoints[i + j * points.Count] = points[i].Pitch; rollPoints[i + j * points.Count] = points[i].Roll; fovPoints[i + j * points.Count] = points[i].FieldOfView; saturationPoints[i + j * points.Count] = points[i].Saturation; sepiaPoints[i + j * points.Count] = points[i].Sepia; } if (iterations > 1) { xPoints[points.Count * iterations] = points[0].X; yPoints[points.Count * iterations] = points[0].Y; zPoints[points.Count * iterations] = points[0].Z; yawPoints[points.Count * iterations] = points[0].Yaw; pitchPoints[points.Count * iterations] = points[0].Pitch; rollPoints[points.Count * iterations] = points[0].Roll; fovPoints[points.Count * iterations] = points[0].FieldOfView; saturationPoints[points.Count * iterations] = points[0].Saturation; sepiaPoints[points.Count * iterations] = points[0].Sepia; } _xSpline = new HermiteInterpolation(HermiteTension.Normal, xPoints); _ySpline = new HermiteInterpolation(HermiteTension.Normal, yPoints); _zSpline = new HermiteInterpolation(HermiteTension.Normal, zPoints); if (times == null) { _yawSpline = new HermiteInterpolation(yawPoints); _pitchSpline = new HermiteInterpolation(pitchPoints); _rollSpline = new HermiteInterpolation(rollPoints); _fovSpline = new HermiteInterpolation(fovPoints); _saturationSpline = new HermiteInterpolation(saturationPoints); _sepiaSpline = new HermiteInterpolation(sepiaPoints); } else { _yawSpline = new HermiteInterpolation(newTimes, yawPoints); _pitchSpline = new HermiteInterpolation(newTimes, pitchPoints); _rollSpline = new HermiteInterpolation(newTimes, rollPoints); _fovSpline = new HermiteInterpolation(newTimes, fovPoints); _saturationSpline = new HermiteInterpolation(newTimes, saturationPoints); _sepiaSpline = new HermiteInterpolation(newTimes, sepiaPoints); } } }