예제 #1
0
        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");
            }
        }
예제 #2
0
        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;
        }
예제 #3
0
 public static PointF Reflect(this PointF vec, PointF point, PointF n)
 {
     var negVec = vec.Negate();
     return n.Multiply(2*negVec.DotProd(n)).Subtract(negVec);
 }