Pravidla Ucet
Nepřihlášen

Článek

Menu

Collision triangle
Napsal: sutr90
Přidáno: 22.07. 2010

Potřebovali jste někdy kotrolovat kolize u trojúhelníků? GM nabízí pouze elipsu/kruh a čtverec. S mým řešením dosáhnete vynikajících výsledků i u trojúhelníků.

Takže nejprve co budeme potřebovat. Nejvhoděnjší bude připravit si následující kód do skriptu a ten poté volat v průběhu hry. Bohužel kód neumžňuje kontrolovat kolizi s kompletním skriptem, ale pouze s bodem. Začneme vytvořením nového skriptu pojmenujeme ho scr_tri_collision.
//deklarace promennych
var x1, x2, x3, y1, y2, y3, xp, yp, v0x, v0y, v1x, v1y, v2x, v2y, dot00, dot01, dot02, dot11, dot12, invDenom, u, v;
//body trojuhelniku
x1 = argument0;
y1 = argument1;
x2 = argument2;
y2 = argument3;
x3 = argument4;
y3 = argument5;
//bod pro kontrolu
xp = argument6;
yp = argument7;
Všimněte si použití klíčového slova var, to zajistí, že proměnné budou pouze lokální v rámci skriptu a poté bude uvolněna pamět, kterou zabírají.
Dále musíme převést jednotlivé body na vektory, které reprezentují strany trojúhelníka a také vektor spojující vrchol úhlu a kolizní bod:
//vektory
v0x=x3-x1;
v0y=y3-y1;
v1x=x2-x1;
v1y=y2-y1;
v2x=xp-x1;
v2y=yp-y1;
Dále musíme spočítat skalární součiny a barycentrické souřadnice:
//skalarni souciny
dot00 = v0x*v0x+v0y*v0y
dot01 = v0x*v1x+v0y*v1y
dot02 = v0x*v2x+v0y*v2y
dot11 = v1x*v1x+v1y*v1y
dot12 = v1x*v2x+v1y*v2y
//barycentricky souradnice invDenom = 1 / (dot00 * dot11 - dot01 * dot01)
u = (dot11 * dot02 - dot01 * dot12) * invDenom
v = (dot00 * dot12 - dot01 * dot02) * invDenom
A nakonec ověříme pozici bodu:
if((u > 0) && (v > 0) && (u + v < 1))
   return true;//bod lezi uvnitr
else
   return false//bod lezi venku
Pro použití skriptu použijte následující kód kdekoliv bude třeba:
if(scr_tri_collision(0,0,10,15,36,35,mouse_x, mouse_y)){
   room_caption = "uvnitř";
} else {
   room_caption = "venku";
Na závěr bych chtěl podotknout, že se nejedná o teorii z mojí hlavy, takže bohužel nemůžu vysvětlit princip fungování kódu. Pravdou je, že kód je funkční a to tak jak je.
Hodně štěstí při práci s GM sutr90
Klíčová slova: collision triangle trojúhelník kolize
 

Komentáře:

Napsal: NicharCZ
Přidáno: 23.07. 2010

Pěknej tutoriál, máš ho zveřejněný. :) Piš další a další, je to hodně užitečné...

Trvalý odkaz

Velkej Chytrák
Copyright (c) 2001-2010