AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi 2 Objekte entfernung berechnen mit dem Mittelpunkt
Thema durchsuchen
Ansicht
Themen-Optionen

2 Objekte entfernung berechnen mit dem Mittelpunkt

Ein Thema von mimi · begonnen am 2. Jul 2006 · letzter Beitrag vom 2. Jul 2006
Antwort Antwort
Seite 2 von 2     12   
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#11

Re: 2 Objekte entfernung berechnen mit dem Mittelpunkt

  Alt 2. Jul 2006, 12:11
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.
Miniaturansicht angehängter Grafiken
unbenannt_447.gif  
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#12

Re: 2 Objekte entfernung berechnen mit dem Mittelpunkt

  Alt 2. Jul 2006, 12:22
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
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: 2 Objekte entfernung berechnen mit dem Mittelpunkt

  Alt 2. Jul 2006, 12:53
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:
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) );
Nach der 2-Punkte Formel: y - y1 = ((y2 - y1) / (x2 - x1)) * (x - x1)


Hoffe das klappt!
Jan
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#14

Re: 2 Objekte entfernung berechnen mit dem Mittelpunkt

  Alt 2. Jul 2006, 13:53
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:
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);
ich werde mir gleich mal eure vorschläge anschauen !!!
Edit:
@TheAn00bis
ungefähr so habe ich es mir auch vorgstellt *G*
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#15

Re: 2 Objekte entfernung berechnen mit dem Mittelpunkt

  Alt 2. Jul 2006, 14:15
Ich habe es GESCHAFT..... es gibt zwar noch ein paar schönheitsfehler aber die löse ich auch noch:
Delphi-Quellcode:
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));
mit diesem code kann die entfernung von mittelpunk a zu mittelpunk b erechnet werden.
ich werde daraus noch eine funktion bauen(wegen der übersichtlichkeit)....
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#16

Re: 2 Objekte entfernung berechnen mit dem Mittelpunkt

  Alt 2. Jul 2006, 17:09
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;
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz