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); }
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); }
private void setSpeed(Vec spd) { speed = spd; pos1 = pos0.Add(speed.Scale(DeltaTime)); collision = null; }