Funciones Matemáticas

Determinar si un punto existe dentro de un triángulo

function PointInTriangle(const Px, Py, x1, y1, x2, y2, x3, y3: Double): Boolean;

var

Or1: Integer;

Or2: Integer;

Or3: Integer;

begin

Or1 := Orientation(x1, y1, x2, y2, Px, Py);

Or2 := Orientation(x2, y2, x3, y3, Px, Py);

Or3 := Orientation(x3, y3, x1, y1, Px, Py);



if (Or1 = Or2) and (Or2 = Or3) then

Result := True

else if Or1 = 0 then

Result := (Or2 = 0) or (Or3 = 0)

else if Or2 = 0 then

Result := (Or1 = 0) or (Or3 = 0)

else if Or3 = 0 then

Result := (Or2 = 0) or (Or1 = 0)

else

Result := False;

end;

(* End of PointInTriangle *)



function Orientation(const x1, y1, x2, y2, Px, Py: Double): Integer;

var

Orin: Double;

begin

(* Linear determinant of the 3 points *)

Orin := (x2 - x1) * (py - y1) - (px - x1) * (y2 - y1);



if Orin > 0.0 then

Result := +1 (* Orientaion is to the right-hand side *)

else if Orin < 0.0 then

Result := -1 (* Orientaion is to the left-hand side *)

else

Result := 0; (* Orientaion is neutral aka collinear *)

end;

(* End of Orientation *)





LIBROS:

Matemáticas, el fascinante mundo de los números

Matrix computations (Matematical Science)

Geometría analítica del plano y del espacio

Mecánica de fluidos

Geometría Afín y Euclidea 


No hay comentarios:

Publicar un comentario

Simulación del movimiento de los electrones en un campo electrico

Espectacular simulación realizada con OpenGL del movimiento de los electrones cuando atraviesan un campo eléctrico. Como muestra la image...