1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| function isinter(p1p,p2p,p1sp,p2sp : tpoint;var xc,yc : integer) : boolean;
var oki : boolean;
d_de_i,d_a_i,d2 : double;
d_de_sp,d_a_sp : double;
d2_sp : double;
r : boolean;
begin
r := false;
oki := intersection(p1p,p2p,p1sp,p2sp,xc,yc);
if (oki) then begin
//d := distance(p1p.x,p1p.y,xc,yc); //distance début du chemin à l'intersection du petit ligne
d2 := distance(p1sp.x,p1sp.y,p2sp.x,p2sp.y); //distance droite chemin
d_de_i := distance(xc,yc,p1sp.x,p1sp.y); //distance point intersection au chemin
d_a_i := distance(xc,yc,p2sp.x,p2sp.y); //distance point intersection au chemin
d2_sp := distance(p1p.x,p1p.y,p2p.x,p2p.y);
d_de_sp := distance(xc,yc,p1p.x,p1p.y);
d_a_sp := distance(xc,yc,p2p.x,p2p.y);
if ((d_de_i<=d2) and (d_a_i<=d2)) then begin
if (d_de_sp<=d2_sp) and (d_a_sp<=d2_sp) then begin
r := true;
end;
end;
end;
isinter := r;
end;
function distance(x1,y1,x2,y2 : integer) : double;
var d : double;
begin
d := sqrt(sqr(y1-y2)+sqr(x1-x2));
distance := d;
end; |
Partager