Ejemplo n.º 1
0
        public void Draw(Graphics g)
        {
            PointF[] dest     = new PointF[3];
            Rot      rotation = new Rot(alpha);
            Vec      sz       = new Vec(image.Size).Scale(scale);

            // x + px*cosa+py*sina, y - px*sina + py*cosa
            dest[0] = Position.Add(rotation.Rotate(-sz.X, -sz.Y)).Point;
            dest[1] = Position.Add(rotation.Rotate(sz.X, -sz.Y)).Point;
            dest[2] = Position.Add(rotation.Rotate(-sz.X, sz.Y)).Point;
            g.DrawImage(image, dest);
        }
Ejemplo n.º 2
0
        public bool CollidesWith(Rib rib, out double hittime)
        {
            // we are working in the reference frame of this.pos0, moving with the speed this.speed
            Vec    ribpos = rib.pos0.Subtract(pos0);
            Vec    ribspd = rib.speed.Subtract(speed);
            double time   = time0;

            if (time0 < rib.time0)
            {
                // correct the position
                time   = rib.time0;
                ribpos = ribpos.Subtract(speed.Scale(time - time0));
            }
            else if (time0 > rib.time0)
            {
                ribpos = ribpos.Add(rib.speed.Scale(time - rib.time0));
            }
            var spd2 = ribspd.Length2;

            if (spd2 <= 0.00001)
            {
                hittime = 0;
                return(false);
            }
            // Let's only find the closest position
            // Xclose = X - (X*V)*V / (V*V)
            // Tclose = -(X*V) / (V*V)
            hittime = -ribpos.Scalar(ribspd) / spd2;
            if (hittime < time ||
                hittime > time1 ||
                hittime > rib.time1)
            {
                return(false);
            }
            return(true);
        }
Ejemplo n.º 3
0
 private void setSpeed(Vec spd)
 {
     speed     = spd;
     pos1      = pos0.Add(speed.Scale(DeltaTime));
     collision = null;
 }