![]() |
Re: 2 Objekte entfernung berechnen mit dem Mittelpunkt
Liste der Anhänge anzeigen (Anzahl: 1)
Hab mir gerade mal überlegt, wie ich es machen würde, aber mein Weg ist ziemlich aufwändig. Leider ist mir wirklich kein leichterer Weg eingefallen. (grobe Skizze meiner Lösung s. Anhang)
Es würde mich wirklich interessieren, wie das leichter zu lösen ist. |
Re: 2 Objekte entfernung berechnen mit dem Mittelpunkt
Bei dieser Konstellation würde ich es so machen::
x-länge = x-abstand - 0.5*Seite_Viereck1 - 0.5*Seite_Viereck2; y-länge = y-abstand/x-abstand * x-länge; länge = sqrt(sqr(x-länge) + sqr(y-länge)); länge, x-länge, y-länge auf g bezogen ;) |
Re: 2 Objekte entfernung berechnen mit dem Mittelpunkt
Wie wäre es mit:
Geradengleichung g aufstellen. In die gleichung den Rand von Object A einsetzen = Schnittpunkt von g und Rand. Dann nochmal den Rand von Object B einsetzen und dann mit Pythagoras den abstand zwischen den 2 Schnittpunken berechnen. Also
Delphi-Quellcode:
Nach der 2-Punkte Formel: y - y1 = ((y2 - y1) / (x2 - x1)) * (x - x1)
var MitteA, MitteB, SchnittA, SchnittB : TPoint;
m, entf : integer; MitteA.X := ObjectA.left + ObjectA.width div 2; MitteA.Y := ObjectA.Top + ObjectA.Height div 2; MitteB.X := ObjectB.left + ObjectB.width div 2; MitteB.Y := ObjectB.Top + ObjectB.Height div 2; m := ((MitteB.Y - MitteA.Y) / (MitteB.X - MitteA.X)); SchnittA.Y := (m * ObjectA.rand.X ) - (m*MitteA.X) + MitteA.Y; SchnittA.X := ObjectA.rand.X; SchnittB.Y := (m * ObjectB.rand.X) - (m*MitteA.X) + MitteA.Y; SchnittB.X := ObjectB.rand.X; entf := sqrt( sqr(SchnittB.X-SchnittA.X) + sqr(SchnittB.Y-SchnittA.Y) ); Hoffe das klappt! |
Re: 2 Objekte entfernung berechnen mit dem Mittelpunkt
Mir ist da noch eine andere lösung eingfallen doch diese hat auch nicht funkioniert und zwar wollte ich folgendes machen:
Zuerst rechne ich den mittelpunk aus, dann rechne ich mir die größe für x und y aus teile sie durch 2 das mache ich mit allen objekten. wenn ich fertig bin muss ich normalerweise doch nur noch: Mittelpunk1-Mittelpunk2-Größe1-Größe2 rechnen doch das klapp leider nich hier mein qullcode:
Delphi-Quellcode:
ich werde mir gleich mal eure vorschläge anschauen !!!
var
i:integer; sm,sm1:TPoint; s1,s2:TPoint; m,s:Integer; begin sm.x:=TFigure(obj.Items[selobj]).Style.LastPos.X div 2; sm.y:=TFigure(obj.Items[selobj]).Style.LastPos.y div 2; S1.X:=(TFigure(obj.Items[selobj]).Style.LastPos.X-TFigure(obj.Items[selobj]).Style.FirstPos.X) div 2; S1.Y:=(TFigure(obj.Items[selobj]).Style.LastPos.Y-TFigure(obj.Items[selobj]).Style.FirstPos.Y) div 2; // und von einenm anderen objekt for i:=0 to obj.count-1 do begin if (TFigure(obj.Items[i]).Style.isSel = True) and (i <> SelObj) then begin with TFigure(obj.Items[i]).Style do begin sm1.x:=LastPos.X div 2; sm1.y:=LastPos.y div 2; S2.X:=(LastPos.X-FirstPos.X) div 2; S2.Y:=(LastPos.Y-FirstPos.Y) div 2; end; end; end; // Label2.Caption:=FloatToStr((Sm1.X-sm.X) / 3 ) m:=sm.X-sm1.X; s:=S1.X+s2.X; Label2.Caption:=IntToStr(s-m); Edit: @TheAn00bis ungefähr so habe ich es mir auch vorgstellt *G* |
Re: 2 Objekte entfernung berechnen mit dem Mittelpunkt
Ich habe es GESCHAFT..... es gibt zwar noch ein paar schönheitsfehler aber die löse ich auch noch:
Delphi-Quellcode:
mit diesem code kann die entfernung von mittelpunk a zu mittelpunk b erechnet werden.
var
i:integer; sm,sm1:TPointExt; s1,s2:TPointExt; m,s:Extended; begin with TFigure(obj.Items[selobj]).Style do begin S1.X:=(LastPos.X-FirstPos.X) / 2; S1.Y:=(LastPos.Y-FirstPos.Y) / 2; sm.x:=FirstPos.X + s1.x; sm.y:=FirstPos.y + s1.y; end; // und von einenm anderen objekt for i:=0 to obj.count-1 do begin if (TFigure(obj.Items[i]).Style.isSel = True) and (i <> SelObj) then begin with TFigure(obj.Items[i]).Style do begin S2.X:=(LastPos.X-FirstPos.X) / 2; S2.Y:=(LastPos.Y-FirstPos.Y) / 2; sm1.x:=FirstPos.X + s2.X; sm1.y:=FirstPos.y + S2.y; end; end; end; // Label2.Caption:=FloatToStr((Sm1.X-sm.X) / 3 ) m:=(sm.X)-sm1.X; s:=S1.X+s2.X; Label2.Caption:=FloatToStr((s-m)); m:=(sm.y)-sm1.y; s:=S1.y+s2.y; Label3.Caption:=FloatToStr((s-m)); ich werde daraus noch eine funktion bauen(wegen der übersichtlichkeit).... |
Re: 2 Objekte entfernung berechnen mit dem Mittelpunkt
es schien zu klappen doch irgenwie brecht er die forschleife bzw. die funktion vorzeitig ab und ich weiß nicht warum:
Delphi-Quellcode:
function GetDir1(ObjIndex:Integer):TPointExt;
var i:integer; sm,sm1:TPointExt; s1,s2:TPointExt; m,s:Extended; e,o1:TPointExt; begin with TFigure(obj.Items[ObjIndex]).Style do begin S1.X:=(LastPos.X-FirstPos.X) / 2; S1.Y:=(LastPos.Y-FirstPos.Y) / 2; sm.x:=FirstPos.X + s1.x; sm.y:=FirstPos.y + s1.y; end; // und von einenm anderen objekt for i:=0 to obj.count-1 do begin if (i <> ObjIndex) then begin with TFigure(obj.Items[i]).Style do begin S2.X:=(LastPos.X-FirstPos.X) / 2; S2.Y:=(LastPos.Y-FirstPos.Y) / 2; sm1.x:=FirstPos.X + s2.X; sm1.y:=FirstPos.y + S2.y; if Sm.x > sm1.x then begin m:=(sm.X)-sm1.X; s:=S1.X+s2.X; end else begin m:=(sm1.X)-sm.X; s:=S2.X+s1.X; end; e.x:=m-s; if Sm.y > sm1.y then begin m:=(sm.y)-sm1.y; s:=S1.y+s2.y; end else begin m:=(sm1.y)-sm.y; s:=S2.y+s1.y; end; e.y:=m-s; end; if (o1.x >e.x ) and (o1.y>e.y) then begin o1.x:=e.x; o1.y:=e.y; result:=o1; end; end; // With end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz