Skip to the content.

Detekce kolizí základních 2D objektů

Pomocný text: Detekce kolizí základních 2D objektů

Kolize kruhu a kruhu

    public bool CircleCircle(Circle c1, Circle c2)
    {
        var stred1 = c1.GetPosition2D();
        var stred2 = c2.GetPosition2D();

        var vzdalenostStredu = (stred1 - stred2).Length();
        var soucetR = c1.GetRadius() + c2.GetRadius();

        return vzdalenostStredu <= soucetR;
    }

kruhy.svg

Interaktivní demostrace: https://www.geogebra.org/m/zpwshfvj

Na této ukázce je využita vlastnost, že pokud se dva kruhy dotýkají či protínají, tak vzdálenost mezi jejich středy je menší nebo rovna součtu jejich poloměrů.

Kolize obdelníku a obdélníku

    public bool QuadQuad(Quad q1, Quad q2)
    {
        var stred1 = q1.GetPosition2D();
        var stred2 = q2.GetPosition2D();

        var stredVzdalenostX = Math.Abs(stred1.X - stred2.X);
        var stredVzdalenostY = Math.Abs(stred1.Y - stred2.Y);

        var soucetPolovinSirek = q1.GetWidth() / 2 + q2.GetWidth() / 2;
        var soucetPolovinVysek = q1.GetHeight() / 2 + q2.GetHeight() / 2;

        return stredVzdalenostX <= soucetPolovinSirek && stredVzdalenostY <= soucetPolovinVysek;
    }

Na této ukázce je využita vlastnost, že pokud se dva obdélníky dotýkají či protínají, tak vzdálenost mezi jejich středy v ose X je menší nebo rovna součtu polovin jejich šířek a vzdálenost mezi jejich středy v ose Y je menší nebo rovna součtu polovin jejich výšek.

Dá se řešit i jednodušeji pomocí porovnání pozic rohů.

obdelniky.svg

Interaktivní demonstrace: https://www.geogebra.org/m/r7qyyxpe

Kolize obdelníku a kruhu

Nejtěžší z těchto tří. Nebude nejspíš v maturitě. Zapomněl jsem to sem dát :(. Tak si na to přiďte sami :-)