obdelník.Contains(bod)
např. kolize obdelníka s myší:if (new Rectangle(pozice.X,pozice.Y,width,Height).Contains(new Point(mys.X, mys.Y)))
obdelník.Contains(obdelník)
kolize obdelníka s obdelníkem pomocí Contains jeden obdelník musí být uvnitř druhého :if (new Rectangle(pozice.X,pozice.Y,width,Height).Contains(new Rectangle(pozice.X,pozice.Y,width,Height)))
obdelník.Intersects(obdelník)
kolize dvou obdelníků při doteku :if (new Rectangle(pozice.X,pozice.Y,width,Height).Intersects(new Rectangle(pozice.X1,pozice.Y1,width1,Height1))
Vector2.Distance(střed1,střed2) < poloměr1 + poloměr2
if (Vector2.Distance(kruh1, kruh2) > ball1.Width / 2 + ball2.Width / 2) { kruh1.X += 5; kruh2.X -= 5; }
najít nejbližší bod od středu kruhu k obdelníku
Vector2 nejbližšíBod = Vector2.Clamp(středKruhu,levýHorníRohObdelníku,pravýDolníRohObdelníku)
Vector2.Distance(středKruhu,nejbližšíBod) < kruh.Width / 2
stred.X += kruh.Width / 2;
stred.Y += kruh.Height / 2;
Vector2 nejblizsiBod = Vector2.Clamp(stred, new Vector2(retCtverec.X, retCtverec.Y), new Vector2(retCtverec.X + retCtverec.Width, retCtverec.Y + retCtverec.Height));
if (Vector2.Distance(nejblizsiBod, stred) > kruh.Width / 2)//kruh.Width / 2 je poloměr kruhu
{
kruh.X -= 5;
}
public bool kolizeKruhObdelnik(Vector2 stredKruhu, float polomer) { Vector2 min = -bodOtaceniObdelníku * scale; Vector2 max = min + new Vector2(obdelnik.Width,obdelnik.Height) * scale; Matrix rotace = Matrix.CreateRotationZ(-otoceniObdelnika); Matrix transformace = Matrix.CreateTranslation(new Vector3(-obdelnikPoz, 0f)); Vector2 novyStred = Vector2.Transform(stredKruhu, transformace * rotace); Vector2 nejblizsiBod = Vector2.Clamp(novyStred, min, max); return Vector2.Distance(novyStred, nejblizsiBod) <= polomer; }
Pokud je u kruhu použito vykreslení
spriteBatch.Draw(textura, pozice, null, Color.White, rotation, střed otáčení, scale, SpriteEffects.None, 0)
a střed otáčení je ve středu textury je střed kruhu u kolizi roven pozici kruhu a poloměr se dá násobit scalem.