cs_Kenavo
Messages postés702Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention 1 octobre 20095 1 nov. 2004 à 08:34
Salut,
C'est vrai que dans ton type d'application, c'est une fonction indispensable !
Ton calcul est certainement plus précis que le mien, c'est un vrai calcul de distance alors que j'ai simplifié la recherche de mini pour éviter les racines carrées (calcul plus rapide).
Et bravo pour le courage ! S'attaquer à un éditeur de PCB, j'aurais pas osé.
Kén@vo
cs_ZED
Messages postés57Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention16 décembre 2005 1 nov. 2004 à 05:50
Merci d'avoir expliqué ^^
// Extrait de mon PCB Layout Editor...
function TWire.ContainPoint(P: TPoint): Boolean;
var
A, B: TPoint;
U, V, W, Dist, D: Double;
begin
A := Board.GridToPixel(StartPoint);
B := Board.GridToPixel(EndPoint);
D := Board.Increment * PCBSteps[Board.FGridStep] div (2 * WidthScale);
if D = 0 then
D := 1;
U := A.Y - B.Y;
V := B.X - A.X;
W := -A.X * (A.Y - B.Y) - A.Y * (B.X - A.X);
Dist := Abs(U * P.X + V * P.Y + W) / Sqrt(Sqr(U) + Sqr(V));
Result := (Dist < D) and (P.X >= Min(A.X, B.X) - D) and
(P.X <= Max(A.X, B.X) + D) and (P.Y >= Min(A.Y, B.Y) - D) and
(P.Y <= Max(A.Y, B.Y) + D);
end;
Avoue que c'est tres ressemblant ;-)
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 8 sept. 2004 à 23:28
Ah comme il devient plaisant de réviser la géométrie en compagnie de Kenavo.
C'est très bien fait, je crois que j'ai même réussi à comprendre vu que c'est tellement bien expliqué. ;o]
1 nov. 2004 à 08:34
C'est vrai que dans ton type d'application, c'est une fonction indispensable !
Ton calcul est certainement plus précis que le mien, c'est un vrai calcul de distance alors que j'ai simplifié la recherche de mini pour éviter les racines carrées (calcul plus rapide).
Et bravo pour le courage ! S'attaquer à un éditeur de PCB, j'aurais pas osé.
Kén@vo
1 nov. 2004 à 05:50
// Extrait de mon PCB Layout Editor...
function TWire.ContainPoint(P: TPoint): Boolean;
var
A, B: TPoint;
U, V, W, Dist, D: Double;
begin
A := Board.GridToPixel(StartPoint);
B := Board.GridToPixel(EndPoint);
D := Board.Increment * PCBSteps[Board.FGridStep] div (2 * WidthScale);
if D = 0 then
D := 1;
U := A.Y - B.Y;
V := B.X - A.X;
W := -A.X * (A.Y - B.Y) - A.Y * (B.X - A.X);
Dist := Abs(U * P.X + V * P.Y + W) / Sqrt(Sqr(U) + Sqr(V));
Result := (Dist < D) and (P.X >= Min(A.X, B.X) - D) and
(P.X <= Max(A.X, B.X) + D) and (P.Y >= Min(A.Y, B.Y) - D) and
(P.Y <= Max(A.Y, B.Y) + D);
end;
Avoue que c'est tres ressemblant ;-)
8 sept. 2004 à 23:28
C'est très bien fait, je crois que j'ai même réussi à comprendre vu que c'est tellement bien expliqué. ;o]