Fangfunktion

Gast
Du meinst das "magnetische Lasso" ?

Dies geht auf den Kontrastwert und sucht sich die Stelle an der der 
Kontast am größten ist.

Den größten Kontast findet man heraus indem man z.B. einen Hochpass über 
das Bild laufen lässt. die hellsten Bildbereiche sind dann diese mit den 
größten Kontrast.
Stichwort: Matrixfilter

Um dann 2 angeklickte Punkte zu verbinden, versucht man über möglichst 
helle Stellen einen Pfad zu bilden (danach evtl noch Kantenglättung usw 
drüber laufen lassen)

Gruß
Roland
Gast
Hallo Roland,
ich meinte die Eigenschaft des Kursors, das er beim Klicken in der Nähe
eines Punktes oder eines Objektes dieses markiert.

Gruß Jürgen
Gast
Recht einfach geht das mit der "Eikonal-Gleichung", die spuckt dir 
virtuelle Höhenlinien aus, du folgst dann genau einer Höhenlinie und 
hast das Objekt markiert. Wikipedia oder yahoo bringen dich da weiter.
Gast
Hallo Fangprogrammierer,

zum Projekt:
für meine Heizungssteuerung erstelle ich eine Menüstruktur in der ich
mich mit zwei Tasten durchs Menü bewege und mit zwei Tasten den
entsprechenden Parameterwert ändere.
Das ganze läuft mit einem Mikrocontroller der die Daten auf ein
2-Zeilen LCD ausgibt.
Zum erstellen des Mikrocontrollerprogramms brauche ich Tabellen in der
die Ausgabetexte und verschiedene Parameter abgelegt sind.
Damit ich diese möglichst übersichtlich und nachvollziehbar gestalten 
kann
verwende ich derzeit das Schaltplanprogramm S-Plan für eine grafische
Darstellung(Siehe Anhang). Daraus erzeuge ich dann über einige Umwege 
meine Tabellen.
Da dieses Programm nicht optimal für meine Anwendung ist, und es auch 
nicht bei einer Steuerung bleibt, denke ich daran mir selbst eines zu 
erstllen.
Meine Vorstellung sieht etwa so aus:
Auf der Zeichenfläche(Formular) plaziere ich Eingabefelder für Text und
Parameter in Form von Editobjekten und verbinde diese mit Linien die
die Beziehungen zwischen den Eingabefeldern herstellen.
Das Zeichnen der Linien(als Vektorgrafik) ist nun kein Problem, nur wie
kann ich auf die gezeichneten Linien wieder zugreifen, damit ich sie
ändern kann.
Programmieren tu ich mit Delphi 5.

Gruß Jürgen
Angehängte Dateien:
Gast
Du willst die Linien auswählen, richtig?

Ich schätze das noch nicht so viele Linien zu verwalten sind.
von daher läst sich das vereinfachen:

-Du holst dir die Maus-Koordinaten .
-und rechnest die  Linien in Bildschirmkoordinaten um.
dann prüfst du halt jede Linie, ob Sie ein virtuelles Rechteck (um den 
Mauskursor herum) schneidet .

Die Linienendpunkte wirst du ja irgendwo gespeichert haben um sie dann 
zu Rendern. Die kannst du ja einfach in einem Strucktur-Array verwalten.

Und dieses Array gehst du dann bei Mausedown durch.
Gast
Hallo,
ich hab mich jetzt nach langen Jahren wieder mit dem Thema 
auseinandergesetzt. (Erschreckend wie die Zeit vergeht)
Mein Ansatz geht jetzt dahin, dass ich jeweils den Abstand vom 
Cursorpunkt zu einer Strecke berechne und Auswerte.
Im Anhang ist die Funktion mit einem kleinen Testprogramm (Delphi 5).
Was könnte ich noch optimieren?
Angehängte Dateien:
Das kommt mir heftig komplex vor.

Eine Möglichkeit:

Man kann für eine beliebige Gerade eine Geradengleichung angeben.
a*x + b*y + c = 0

(die Parameter der geradengleichung a, b, c lassen sich leicht 
bestimmen, denn du kennst ja 2 Punkte auf der Geraden für die die 
Gleichung erfüllt ist)


Der springende Punkt ist: setzt du jetzt einen beliebigen Punkt in diese 
Gleichung ein

    d = a * x_punkt + b * y_punkt + c

dann ist d DIREKT die Normaldistanz des Punktes zur (unendlichen) 
Geraden, die durch a, b, c beschrieben ist.

Ist nun diese Distanz schon größer als die bisher gefundene 
Minimaldistanz, dann brauchst du die Linie gar nicht weiter beachten. So 
kann schon mal nicht näher am Punkt liegen.

Aber die Umkehrung gilt (noch) nicht. Liegt der Punkt näher an der 
unendlichen Geraden, muss er noch lange nicht näher an der begrenzten 
Linie gehen. Hier hilft dann Gramm-Schmidt weiter um den Punkt auf die 
Gerade zu projezieren und nachzusehen, ob der so projezierte Punkt 
zwischen den beiden Punkten liegt oder nicht.
Gast
Karl Heinz Buchegger schrieb:
> Hier hilft dann Gramm-Schmidt weiter um den Punkt auf die

Abstand Testpunkt p zu einer Linie bc (nicht unendliche Gerade) geht 
übrigens so:
1
  #      (c)
2
  #     /
3
  #    /     (p)
4
  #   /
5
  # (b)
6
  # see http://www.geometrictools.com/
7
  #
8
  def distance_line_segment_point_squared(bx, by, cx, cy, px, py)
9
    mx = cx - bx
10
    my = cy - by
11
    hx = px - bx
12
    hy = py - by
13
    t0 = (mx * hx + my * hy).fdiv(mx ** 2 + my ** 2)
14
    if t0 <= 0
15
    elsif t0 < 1
16
      hx -= t0 * mx
17
      hy -= t0 * my
18
    else
19
      hx -= mx
20
      hy -= my
21
    end
22
    return hx ** 2 + hy ** 2
23
  end
Gast
Hallo Stefan,
dein Vorschlag ist genau das, was ich brauche.
Ich habe es nur noch nach ins Pascal übersetzen müssen, aber jetzt 
funktioniert es einwandfrei.

function AbstandPunktStrecke(px,py,bx,by,cx,cy: integer):integer;
var  mx,my,hx,hy,t0 : real;
begin
  mx := cx - bx;
  my := cy - by;
  hx := px - bx;
  hy := py - by;
  t0 := (mx * hx + my * hy)/(sqr(mx) + sqr(my));
  if t0 >= 0 then
    if t0 < 1 then
    begin
    hx := hx - t0 * mx;
    hy := hy - t0 * my;
    end
    else
    begin
      hx := hx - mx;
      hy := hy - my;
      end;
  result := round(sqrt((sqr(hx) + sqr(hy))));
end;

Danke nochmal und
viele Grüße

Jürgen

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.