AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Gibt es eine direkte Verbindung zwischen 2 Pixeln
Thema durchsuchen
Ansicht
Themen-Optionen

Gibt es eine direkte Verbindung zwischen 2 Pixeln

Ein Thema von Flogo · begonnen am 10. Okt 2004 · letzter Beitrag vom 12. Okt 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Flogo
Flogo

Registriert seit: 24. Mär 2003
Ort: Freiburg im Breisgau
317 Beiträge
 
Delphi 7 Professional
 
#1

Gibt es eine direkte Verbindung zwischen 2 Pixeln

  Alt 10. Okt 2004, 20:46
Hi
Ich hab mich heute an einer A*-Umsetzung versucht und bekomme auch relativ gute Ergebnise. Die Ergebnispfade sind bei mir Arrays of TPoint, die ich jetzt vereinfachen will. Aus einer Kette von vielleicht 50 Punkten, will ich jetzt die "Schlüsselpunkte" herausfinden, d.h ich will solange den Punkt i aus der Liste löschen, solange eine direkte Verbindung zum Punkt i+1 noch möglich ist. Und genau da ist mein Problem:
Wie schaffe ich es ohne einen riesen Rechenaufwand festzustellen, ob die Verbindung zwischen 2 Punkten frei ist?

Ich hoffe das hat jetzt jemand verstanden ...
If one coincidence can occur, then another coincidence can occur. And if one coincidence happens to occur just after another coincidence, then that is just a coincidence.
DNA

www.Anyxist.de
  Mit Zitat antworten Zitat
StefanDP

Registriert seit: 11. Apr 2004
294 Beiträge
 
#2

Re: Gibt es eine direkte Verbindung zwischen 2 Pixeln

  Alt 10. Okt 2004, 20:58
vom prinzip müsst des ja so gehen
Code:
funktion checke(feld: TPoint): boolean
wenn (feld nicht-möglich/erlaubt)
  ergebnis = false
sonst wenn (feld = ziel)
  ergebnis = true
sonst
  result := checke(f1) or checke(f2) or checke(f3) // alle umliegenden felder
  Mit Zitat antworten Zitat
Benutzerbild von Flogo
Flogo

Registriert seit: 24. Mär 2003
Ort: Freiburg im Breisgau
317 Beiträge
 
Delphi 7 Professional
 
#3

Re: Gibt es eine direkte Verbindung zwischen 2 Pixeln

  Alt 10. Okt 2004, 21:56
Das Problem ist, dass ich ja nicht nochmal alle Felder untersuchen will - ich weiß ja dass es einen Weg gibt - sondern nur die, die auf der direkten Linie zwischen zweit Punkten liegen. Und das ist eben leider nicht immer eindeutig:
http://www.Anyxist.de/florian/Pixel.JPG
Also müsste die Frage wahrscheinlich eher so heißen:
Wie komme ich am schnellsten an die Koordinaten von allen Pixeln, die auf der Linie liegen
If one coincidence can occur, then another coincidence can occur. And if one coincidence happens to occur just after another coincidence, then that is just a coincidence.
DNA

www.Anyxist.de
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#4

Re: Gibt es eine direkte Verbindung zwischen 2 Pixeln

  Alt 10. Okt 2004, 22:13
Zitat:
ob die Verbindung zwischen 2 Punkten frei ist?

... einfach die nachpar pixel um den einen prüfen
if cancas.pixels[x+1,y+1] = clwhite(oder halt die "leere farbe" oder halt "nicht die punktfarbe der punkte

then


und das in ner schleife
Nico Müller
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Gibt es eine direkte Verbindung zwischen 2 Pixeln

  Alt 10. Okt 2004, 22:20
Was ist denn genau die Aufgabe die du damit lösen willst? Ich hab den Hintergrund nicht ganz verstanden, aber mein Ansatz wäre zu versuchen, eine Art Funktion für diese Pixel aufzustellen:
Vom Pixel A(0,0) zum Pixel B(10,20) sähe das dann so aus:

f(x)=[(20-0)/(10-0)]*x. // Steigungsdreieck wie aus der 8. Klasse

Und dann
Delphi-Quellcode:
for i:= A.x to B.x do
Pixel[A.x+i,A.y+f(i)].color:=ClLiegtdrauf.
Nur beim Runden gibts Probleme.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#6

Re: Gibt es eine direkte Verbindung zwischen 2 Pixeln

  Alt 10. Okt 2004, 22:29
wie ichs verstanden habe mag e nur wissen ob eine linie existiert ... da genügt ein schwarzer pixel in z richtung und x länge
Nico Müller
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Gibt es eine direkte Verbindung zwischen 2 Pixeln

  Alt 10. Okt 2004, 23:21
Moin,

dafür ist etwas Vektorrechnung erforderlich...

Ich habe hier mal die Berechnung für 3D-Punkte angegeben, wenn du nur 2D-Punkte hast lässt du einfach die dritte Dimenstion auf Null.

Delphi-Quellcode:
type
  TPoint3D = packed record
    X: Longint;
    Y: Longint;
    Z: Longint;
  end;

  :

function Point3D(X, Y, Z: Integer): TPoint3D;
begin
  Result.X := X;
  Result.Y := Y;
  Result.Z := Z;
end;

function PunktAufGerade(P1, P2, P3:TPoint3D):boolean;

  function subP(P1, P2:TPoint3D):TPoint3D;
  begin
    Result.X:=P1.X - P2.X;
    Result.Y:=P1.Y - P2.Y;
    Result.Z:=P1.Z - P2.Z;
  end;

  function skalar(a, b:integer):integer;
  begin
    if b = 0 then
      Result:=0
    else
      Result:=a div b;
  end;

var a, b:TPoint3D;
    sX, sY, sZ:integer;
begin
  a:=subP(P2, P1);
  b:=subP(P3, P1);

  sX:=skalar(a.X, b.X);
  sY:=skalar(a.Y, b.Y);
  sZ:=skalar(a.Z, b.Z);

  Result:= (sX = sY)
          and (sX = sZ);
end;

procedure TForm.ButtonClick(Sender: TObject);
var a, b, c:TPoint3D;
begin
  a:=Point3D(3, 0, 4);
  b:=Point3D(1, 1, 1);
  c:=Point3D(-1, 2, -2);
  if PunktAufGerade(a, b, c) then
    showmessage('auf der Gerade')
  else
    showmessage('nicht auf der Gerade');
end;
hier wird getestet, ob die drei Punkte auf einer Geraden liegen.


MfG
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#8

Re: Gibt es eine direkte Verbindung zwischen 2 Pixeln

  Alt 10. Okt 2004, 23:36
da gibt so einen freakigen algo, der testet, auf welche felder man kommt, wenn man von A nach B will. der schaut immer, ob man eher rechts oder eher oben muss (angenommen man muss nach rechts oben), geht dann dorthin und testet weiter.

auf den namen komm ich leider nicht. das mit dem steigungsdreieck ist ne übergangslösung, die allerdings funktionieren sollte.
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Gibt es eine direkte Verbindung zwischen 2 Pixeln

  Alt 10. Okt 2004, 23:39
Zitat von Flogo:
Ich hab mich heute an einer A*-Umsetzung versucht und bekomme auch relativ gute Ergebnise [...] die ich jetzt vereinfachen will.
Den Algo hatter schon
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#10

Re: Gibt es eine direkte Verbindung zwischen 2 Pixeln

  Alt 11. Okt 2004, 00:19
Eine mögliche lösung wäre es, die heuristik (ziel strecken schätzung) über zu bewerten, sodass die kantenkosten an gewicht verlieren. So kannst du dich der luftlinie annähern und es werden trotzdem noch schwere hindernisse umgangen. Auf dem resultierenden pfad kannst du dann die punkte mit gleichem delta-vektor streichen...
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:44 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