unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, strutils;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
rectas: array[1..4] of string;
puntosX: array[1..4] of integer;
puntosY: array[1..4] of integer;
implementation
{$R *.dfm}
//********************************************************
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
pX, pY: real;
desde, hasta: integer;
puntoOrdenado1, puntoOrdenado2: real;
denominador1, denominador2: real;
numerador, total: real;
corta: integer;
begin
pX:=4;
pY:=38.5596881;
corta:=0; // las veces que corta por arriba un punto dado
desde:=1; // los segmentos de la zona el primero
hasta:=4; // los segmentos de la zona el ultimo (en este ej.)
//***
for i := desde to hasta do
begin
if i<>4 then
begin
puntoOrdenado1:=puntosX[i];
puntoOrdenado2:=puntosX[i+1];
if (puntoOrdenado1>puntosX[i+1]) then
begin
puntoOrdenado1:=puntosX[i+1];
puntoOrdenado2:=puntosX[i];
end;
if ((puntoOrdenado1<=pX) and (puntoOrdenado2>=pX)) then
begin
// ecuaciones de la recta ((X - Xa) / (Xb - Xa)) = ((Y - Ya) / (Yb - Ya))
numerador:=pX - puntosX[i+1];
denominador1:= puntosX[i+1] - puntosX[i];
denominador2:= puntosY[i+1] - puntosY[i];
total:= (numerador * denominador2 / denominador1) + puntosY[i+1];
if total >= pY then
begin
corta:=corta+1;
end;
//showmessage(floattostr(total));
end;
end
else
begin
puntoOrdenado1:=puntosX[desde];
puntoOrdenado2:=puntosX[hasta];
if (puntoOrdenado1>puntosX[hasta]) then
begin
puntoOrdenado1:=puntosX[hasta];
puntoOrdenado2:=puntosX[desde];
end;
if ((puntoOrdenado1<=pX) and (puntoOrdenado2>=pX)) then
begin
numerador:=pX - puntosX[hasta];
denominador1:= puntosX[hasta] - puntosX[desde];
denominador2:= puntosY[hasta] - puntosY[desde];
total:= (numerador * denominador2 / denominador1) + puntosY[hasta];
if total >= pY then
begin
corta:=corta+1;
end;
//showmessage(floattostr(total));
end;
end;
end;
// ShowMessage(inttostr(corta));
if (corta mod 2 <> 0) then
begin
ShowMessage('Dentro');
end
else
begin
ShowMessage('Fuera');
end;
// ShowMessage(floattostr(corta mod 2));
end;
//********************************************************
procedure TForm1.FormCreate(Sender: TObject);
begin
// vertices de la zona (-5,3) (6,9) (3,5) (9,-3)
puntosX[1]:=-5;
puntosX[2]:=6;
puntosX[3]:=3;
puntosX[4]:=9;
puntosY[1]:=3;
puntosY[2]:=9;
puntosY[3]:=5;
puntosY[4]:=-3;
end;
end.
http://es.onlinemschool.com/math/assistance/cartesian_coordinate/p_to_line/
http://fooplot.com
.
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario