Registriert seit: 31. Mai 2009
1.198 Beiträge
Turbo Delphi für Win32
|
Re: Koordinaten zwischen zwei Punkten
13. Feb 2010, 19:00
Zitat von Delphi-Narr:
Hm, und wie soll ich die dann aufrufen? Ich möchte ja keinen Prozentwert angeben, sondern einen absoluten Wert...
Und TPointF kann man ja nicht im LineTo einbauen.
Hier mal mein Lösungsansatz:
Delphi-Quellcode:
function TForm1.PointOnLine(X1,Y1,X2,Y2,Abstand:integer):TPoint;
var V:real; //Verhältnis zwischen AB und AD
AB,BD,AD,AE,CE,x,y:integer;
begin
AD:=X1-X2;
BD:=Y1-Y2;
AB:=(Round(sqrt(sqr(AD)+sqr(BD))));
if AD<>0 then V:=AB/AD else V:=1;
CE:=Round(BD/V);
AE:=Round(Sqrt(sqr(Abstand)-sqr(CE)));
x:=Round(X1+AE);
y:=Round(Y1+CE);
Result:=Point(X,Y);
end;
Ich lad mal ein Bild hoch, was die Punkte benennt
1. Dann modifiziere meinen Code so, dass >vSE< normalisiert wird (dh Länge=1 hat) und anschließend multiplizierst du es anstatt mit dx mit dem Wert, den du haben willst.
2. Per Round() kannst du Float-Werte nach Integer umwandeln
edit:
Delphi-Quellcode:
function TForm1.PointOnLine( const X1,Y1,X2,Y2,Abstand: Integer): TPoint;
ver
dX, dY,
dL: Single;
begin
dX := X2-X1;
dY := Y2-Y1;
dL := SQRT( dX*dX + dY*dY );
if dL = 0 then
dL := 1;
dX := dX / dL;
dY := dY / dL;
Result := Point( Round( dX*Abstand ), Round( dY*Abstand ) );
end;
MfG
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
|
|
Zitat
|