WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

die meisten Punkte die auf einem Kreis liegen?

 

Hilbert86
Forum-Century

Forum-Century


Beiträge: 113
Anmeldedatum: 08.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2009, 12:50     Titel: die meisten Punkte die auf einem Kreis liegen?
  Antworten mit Zitat      
Hallo Leute

ich habe etwa 1000 punkte X/Y und einen Kreis dessen Mittelpunkt und Radius bekannt sind. Nun möchte ich alle Punkte die genau auf dem Kreis liegen ermitteln. Wie mache ich das am besten?


Gruß
Hilbert
_________________

MMAAAAAATTTTTLLAAAAABBBB
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.12.2009, 14:01     Titel:
  Antworten mit Zitat      
Hallo,

"genau" auf diesem Kreis ist problematisch, da minimalste numerische Abweichungen reinspielen.

Geg.: (xm, ym), r, und eine Toleranz tol

Das sollte funktionieren:

Code:
xkreis = x(abs((x-xm).^2 + (y-ym).^2 - r^2) < tol);
ykreis = y(abs((x-xm).^2 + (y-ym).^2 - r^2) < tol);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Hilbert86
Themenstarter

Forum-Century

Forum-Century


Beiträge: 113
Anmeldedatum: 08.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2009, 16:17     Titel:
  Antworten mit Zitat      
ok das ist schon mal sehr viel danke Smile

und wie mache ich das wenn ich mehrere Mittelpunkte habe?

Es gibt eine Tabelle aus der ich die mittelpunkte her hole. Diese Tabelle hat 4 Spalten [xm ym r häufigkeit].

Jetzt möchte ich in diese Tabelle zu jedem Mittelpunkt, die Anzahl der Punkte die auf diesem Kreis liegen in die 5te Spalte einfügen. Könntet ihr mir sagen ob das ohne for schleife geht? wie löse ich das geschickt?
_________________

MMAAAAAATTTTTLLAAAAABBBB
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.12.2009, 16:46     Titel:
  Antworten mit Zitat      
Hallo,

dafür wird eine for-Schleife das geschickteste und einfachste sein... z.B. so:

Code:
for I = 1:N
xkreis{I} = x(abs((x-xm(I)).^2 + (y-ym(I)).^2 - r(I)^2) < tol);
ykreis{I} = y(abs((x-xm(I)).^2 + (y-ym(I)).^2 - r(I)^2) < tol);
end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Hilbert86
Themenstarter

Forum-Century

Forum-Century


Beiträge: 113
Anmeldedatum: 08.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2009, 19:40     Titel:
  Antworten mit Zitat      
also irgendwo ist da ein fehler weil ich für xkreis und ykreis bekomm ich eine 1 x irgendeinegroßezahl cell die dann leer ist. woran könnte das liegen?

und noch ne andere Frage wie hoch soll ich den tol angeben?
_________________

MMAAAAAATTTTTLLAAAAABBBB
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.12.2009, 20:13     Titel:
  Antworten mit Zitat      
Hallo,

ich sehe auf den ersten Blick keinen Fehler. Du kannst ja mal testweise bei einem Punkt, der auf einem bestimmten Kreis sein sollte, den Abstand zum Mittelpunkt berechnen.
Zur Wahl von tol: das kommt drauf an. Wenn du nur numerische Fehler ausschließen möchtest und die Punkte eigtl exakt auf dem Kreis liegen sollten, dann z.B. 1e-8. Je nach Größe von x, y, r und der erlaubten Abweichung kann tol aber auch 0.01 oder größer sein.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Hilbert86
Themenstarter

Forum-Century

Forum-Century


Beiträge: 113
Anmeldedatum: 08.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2009, 21:39     Titel:
  Antworten mit Zitat      
ok also du hast recht von der formel her stimmt alles.

aber das problem ist das abspeichern.

Mein Ziel ist: ich hab eine Variable Pic [xm ym radius häufigkeit ]
die ich auf eine 5te Spalte erweitern möchte. Die 5te Spalte soll dann die Anzahl der Punkte die auf dem Kreis liegen darstellen. Und das soll für jede Zeile in Pic gemacht werden. Somit sollen am ende in jeder Zeile an 5ter stelle die anzahl der punkte die auf demjenigen kreis liegen eingefügt werden.

Mein Vorschlag wäre dann so:

Code:

tol=0.01;

for I = 1:N %größe der vorhandenen Mittelpunkte
    for P=1:M %größe der vorhandenen Punkte
       
       if((x(P)-xm(I)).^2 + (y(P)-ym(I)).^2 - (r(I)^2) < tol)
           %hier fält mir nix weiteres ein :(((
      %fakt ist wenn P komplett durch ist sollte die anzahl bekannt sein aber wie speichere ich das ab?

       end


    end
end


mir fält irgendwie nicht ein wie ich das in Pic abspeichern könnte ohne was zu überschreiben.
_________________

MMAAAAAATTTTTLLAAAAABBBB
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.12.2009, 21:57     Titel:
  Antworten mit Zitat      
Hallo,

da würde ich dann schreiben
Code:
r(I) = r(I) + 1;

und außerhalb der Schleife
Code:


Aber warum so umständlich? Das tuts auch, denke ich:

Code:
for I = 1:N
xkreis{I} = x(abs((x-xm(I)).^2 + (y-ym(I)).^2 - r(I)^2) < tol);
ykreis{I} = y(abs((x-xm(I)).^2 + (y-ym(I)).^2 - r(I)^2) < tol);
end
anzahl = cellfun(@length, xkreis);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Hilbert86
Themenstarter

Forum-Century

Forum-Century


Beiträge: 113
Anmeldedatum: 08.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2009, 22:17     Titel:
  Antworten mit Zitat      
Hallo Harald

vielen dank das du mir geholfen hast. Finde ich voll super

aber ein kleines Problem hätte ich da noch. Vlt ist es ein denk fehler aber manche mittelpunkte haben den wert 0 was eigentlich nicht sein kann da die kreise aus 3 punkte aus der x,y tabelle stammen. kannst du dir das irgendwie erklären?
_________________

MMAAAAAATTTTTLLAAAAABBBB
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.12.2009, 23:34     Titel:
  Antworten mit Zitat      
Hallo,

bist du denn sicher, dass Mittelpunkte und Radien korrekt bestimmt wurden?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Hilbert86
Themenstarter

Forum-Century

Forum-Century


Beiträge: 113
Anmeldedatum: 08.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2009, 23:52     Titel:
  Antworten mit Zitat      
Hallo

also die bestimmung der mittelpunkte und radien hab ich folgendermasen gemacht:

Bei dem Bild handelt es sich um ein Binärbild auf dem ein Kreis abgebildet ist.

Die mittelpunkte hab ich nach dem prinzip der Ransac methode ermittelt in dem ich 3 zufällige punkte nehme und durch diese einen kreis zeichne. Somit bekomme ich meine tabelle mit den mittelpunkten und radien das heist jeder kreis sollte mindestens 3 punkte beinhalten aber tut es nicht echt komisch!

könnte es vlt daran liegen das ich gerundet habe?
_________________

MMAAAAAATTTTTLLAAAAABBBB
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.12.2009, 00:11     Titel:
  Antworten mit Zitat      
Hallo,

überprüf mal nochmal, wie du den Kreis durch die 3 Punkte legst. Und ja, wenn du rundest, kann es natürlich Abweichungen geben (was bringt dich dazu, zu runden?). Und wenn tol zu klein ist, dann kann es natürlich zu Fehlern / Falscherkennungen kommen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Hilbert86
Themenstarter

Forum-Century

Forum-Century


Beiträge: 113
Anmeldedatum: 08.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2009, 00:19     Titel:
  Antworten mit Zitat      
Code:

x1=[ZufalsVektor1(:,1);ZufalsVektor2(:,1);ZufalsVektor3(:,1)];
                  y1=[ZufalsVektor1(:,2);ZufalsVektor2(:,2);ZufalsVektor3(:,2)];
                  %Schwerpunkt/Mittelwert
                  xm=mean(x1);
                  ym=mean(y1);
                  %Radius
                  r = mean(hypot(x1-xm,y1-ym));


so habe ich die Werte bestimmt 3Zufalsvektoren und dannach habe ich sie gerundet![/code]
_________________

MMAAAAAATTTTTLLAAAAABBBB
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.12.2009, 00:42     Titel:
  Antworten mit Zitat      
Hallo,

ich verstehe nicht, was das mit den 3 Zufallsvektoren soll...
Entscheidender ist aber das Problem, dass die Punkte gleichmässig über die gesamte Kreislinie verteilt sein müssen, damit das klappt (stell dir mal vor, sie wären alle in einer Hälfte des Kreises).

Lass doch z.B. mal den Kreis plotten, dann siehst du ja, was rauskommt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Hilbert86
Themenstarter

Forum-Century

Forum-Century


Beiträge: 113
Anmeldedatum: 08.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2009, 00:56     Titel:
  Antworten mit Zitat      
Ja ist ja klar aber ich versuche den Ransac algorithmus zu implementieren und der funktioniert halt so in dem man 3 Zufallspunkte nimmt (die Punkte können nebeneinander sein oder auch weit voneinander entfernt zufall eben ) einen kreis durch zeichnet und schaut wieviele punkte die nicht 0 (binär )sind darauf liegen! Je mehr punkte darauf liegen desto wahrscheinlicher ist es das es ein kreis ist! und das maximum sollte dann der kreis sein!

und was ich gemerkt habe wenn ich die toleranz auf 10 setzte kommen echt gute ergebnisse dabei raus!
_________________

MMAAAAAATTTTTLLAAAAABBBB
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2, 3  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.