private void GetBezierPoints(StringBuilder resultString, PointFDraw P0, PointFDraw P1, PointFDraw P2, PointFDraw P3, float step) { PointFDraw p; for (float t = 0.0F; t <= 1.0F; t += step) { float k0 = (float)Math.Pow(1 - t, 3); float k1 = (float)(3 * Math.Pow(1 - t, 2) * t); float k2 = (float)(3 * (1 - t) * Math.Pow(t, 2)); float k3 = (float)Math.Pow(t, 3); p = P0.Multiply(k0) .Add(P1.Multiply(k1)) .Add(P2.Multiply(k2)) .Add(P3.Multiply(k3)); resultString.Append(p.X.ToString()); resultString.Append(", "); resultString.Append(p.Y.ToString()); resultString.Append("\r\n"); } }
private void InitParticle(Particle particle) { //position particle.pos.X = (int)(CenterOfGravity.X + PosVar.X * Random11()); particle.pos.Y = (int)(CenterOfGravity.Y + PosVar.Y * Random11()); // direction float a = (Angle + AngleVar * Random11()).ToRadians(); PointF v = new PointF((float)Math.Cos(a), (float)Math.Sin(a)); float s = Speed + SpeedVar * Random11(); v = v.Multiply(s); particle.dir = v; // radial accel particle.radialAccel = RadialAccel + RadialAccelVar * Random11(); // tangential accel particle.tangentialAccel = TangentialAccel + TangentialAccelVar * Random11(); // life float life = Life + LifeVar * Random11(); particle.life = Math.Max(0, life); // color ColorF start = new ColorF(); start.R = StartColor.R + StartColorVar.R * Random11(); start.G = StartColor.G + StartColorVar.G * Random11(); start.B = StartColor.B + StartColorVar.B * Random11(); start.A = StartColor.A + StartColorVar.A * Random11(); ColorF end = new ColorF(); end.R = EndColor.R + EndColorVar.R * Random11(); end.G = EndColor.G + EndColorVar.G * Random11(); end.B = EndColor.B + EndColorVar.B * Random11(); end.A = EndColor.A + EndColorVar.A * Random11(); particle.color = start; particle.deltaColor.R = (end.R - start.R) / particle.life; particle.deltaColor.G = (end.G - start.G) / particle.life; particle.deltaColor.B = (end.B - start.B) / particle.life; particle.deltaColor.A = (end.A - start.A) / particle.life; // size float startS = StartSize + StartSizeVar * Random11(); startS = Math.Max(0, startS); particle.size = startS; if (EndSize == ParticleStartSizeEqualToEndSize) { particle.deltaSize = 0; } else { float endS = EndSize + EndSizeVar * Random11(); particle.deltaSize = (endS - startS) / particle.life; } // angle float startA = StartSpin + StartSpinVar * Random11(); float endA = EndSpin + EndSpinVar * Random11(); particle.angle = startA; particle.deltaAngle = (endA - startA) / particle.life; particle.startPos = this.Position; }
public static PointF Reflect(this PointF vec, PointF point, PointF n) { var negVec = vec.Negate(); return n.Multiply(2*negVec.DotProd(n)).Subtract(negVec); }