il punto P appartiene al segmento AB?

Scripts e snippets scritti in GameMaker Language (gml)
Rispondi
Avatar utente
boxbuilder
Membro
Messaggi: 158
Iscritto il: 25/06/2015, 10:37
Specialità: programmatore
Uso: GM:Studio 1.4 HTML5
Contatta:

il punto P appartiene al segmento AB?

Messaggio da boxbuilder »

Ciao, posto qua un utile script per capire se un dato punto appartiene ad un segmento o no:

Codice: Seleziona tutto

//belongs a point in segment? return true false;
//argument0 = Px, argument1 = Py, argument2 = S1x, argument3 S1Y, argument4 = S2x, argument5 S2Y,

var p_x = argument0;
var p_y = argument1;

var s1_x = argument2;
var s1_y = argument3;

var s2_x = argument4;
var s2_y = argument5;

var E = 0.001;

if (p_x - max(s1_x, s2_x) > E || 
    min(s1_x, s2_x) - p_x > E || 
    p_y - max(s1_y, s2_y) > E || 
    min(s1_y, s2_y) - p_y > E)
    return false;

if (abs(s2_x - s1_x) < E)
    return abs(s1_x - p_x) < E || abs(s2_x - p_x) < E;
if (abs(s2_y - s1_y) < E)
    return abs(s1_y - p_y) < E || abs(s2_y - p_y) < E;

var X = s1_x + (p_y - s1_y) * (s2_x - s1_x) / (s2_y - s1_y);
var Y = s1_y + (p_x - s1_x) * (s2_y - s1_y) / (s2_x - s1_x);

return abs(p_x - X) < E || abs(p_y - Y) < E;
lo script è abbastanza self explaining, l'unica cosa un po' strana è che c'è una "E" (epsilon) che per risolvere eventuali problemi di arrotondamento.

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti