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

prüfen ob Punkte collinear sind

 

rooky
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 76
Anmeldedatum: 25.04.12
Wohnort: ---
Version: 2012a
     Beitrag Verfasst am: 28.05.2013, 15:48     Titel: prüfen ob Punkte collinear sind
  Antworten mit Zitat      
Hallo
ich habe folgendes Problem:
Ich möchte prüfen, ob wenigstens 3 Punkte in einer Matrix eine Ebene aufspannen um später mit convhull eine Umhüllende zu generieren.
Hier ein Beispiel:
Code:
 punkte =[6   -2
               2   -1
               5   -1
               7   -2];
convhull(punkte(:,1),punkte(:,2))

funktioniert. Alles gut.
Nächstes Beispiel:
Code:
 punkte =[6   -2
               2   -2
               5   -2
               7   -2];
convhull(punkte(:,1),punkte(:,2))

Geht nicht da "The points may be collinear"
Noche ein Beispiel:
Code:
punkte =[6   -2
               2   -1
               6   -2];
convhull(punkte(:,1),punkte(:,2))

Geht nicht da "The points may be collinear"

Wie schaffe ich es eine Abfrage zu gestalten, damit mr der code nicht bei der convhull abbricht?
Danke
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 28.05.2013, 16:11     Titel:
  Antworten mit Zitat      
hmm um zu testen ob vektoren in die selbe richtung zeigen würd ich das skalarprodukt berechnen.
Code:
punkte=[6,-2;2,-1;5,-1;7,-2];
 for l=3:size(punkte,1)
     if  dot(punkte(1,:)-punkte(2,:),punkte(1,:)-punkte(l,:))~=0
         break
     end
 end
Private Nachricht senden Benutzer-Profile anzeigen
 
rooky
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 76
Anmeldedatum: 25.04.12
Wohnort: ---
Version: 2012a
     Beitrag Verfasst am: 28.05.2013, 16:38     Titel:
  Antworten mit Zitat      
da hast du mich jetzt abgehängt. Du berechnest das Scalarprodukt aus dem Vector 1-2 und 1-l. Aber was ist denn mit 1-3 und 1-l. Wenn ich jetzt z.B. 10 punkte habe, dann müsste ich ja alle möglichen Vektoren vergleichen, nicht nur 1-2 und 1-(1-10).
Kann aber auch sein ich versteh das jetzt nicht so ganz.

P.S.: gibt es in Matlab nicht so was wie (convhull hat einen Error, daher bitte überspringen)?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 28.05.2013, 16:48     Titel:
  Antworten mit Zitat      
ich hab das so verstanden das du nur gucken wolltest ob wenigstens 3 Punkte in einer Matrix eine Ebene aufspannen . und das macht meien funktion unter der vorraussetzung das die ersten beiden punkte nicht identisch sind. welche startpunkt du nimmst ist dabei vokommen banane aber zwecks for schleife hab ich mich mal an die reihenfolge im vektor gehalten.
Zitat:
Wenn ich jetzt z.B. 10 punkte habe, dann müsste ich ja alle möglichen Vektoren vergleichen, nicht nur 1-2 und 1-(1-10).
warum ?
Private Nachricht senden Benutzer-Profile anzeigen
 
rooky
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 76
Anmeldedatum: 25.04.12
Wohnort: ---
Version: 2012a
     Beitrag Verfasst am: 28.05.2013, 17:31     Titel:
  Antworten mit Zitat      
Ja, du hast das schon richtig verstanden. Vielleicht ist dein Weg auch eine gute Lösung. Ich weiss es aber noch nicht so genau.
Mich hat nur verwundert das du sagst: "Wenn die Vektoren senkrecht stehen (Skalarprodukt=0) dann break" Das hab ich nicht ganz verstanden.
Deine Idee aber mit dem Vektorprodukt (cross) und eine Dim mehr müsste schon gehen. Ist das die Lösung die ich machen sollte?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 28.05.2013, 17:36     Titel:
  Antworten mit Zitat      
der break is da nur weil er ja nicht weiter machen muss wenn einen vektor gefunen hat der nicht coliniar ist. da kannst du aber euch andere sachen einfügen.
randbemerkung
du hast 2d werte
wenn du also 2 punkte hast die nicht identisch sind sind die schonmal auf einer graden.
jetzt must du nur noch gucken ob einer der 7 anderen punkt nicht auch auf dieser graden liegen.
Private Nachricht senden Benutzer-Profile anzeigen
 
rooky
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 76
Anmeldedatum: 25.04.12
Wohnort: ---
Version: 2012a
     Beitrag Verfasst am: 01.06.2013, 08:44     Titel:
  Antworten mit Zitat      
ich bin leider immer noch nicht richtig am Ziel. Ich habe aber diesen Artikel gefunden:
http://blogs.mathworks.com/loren/2008/06/06/collinearity/#22
Leider fehlt mir ein bisschen die wirkliche Loesung. Welchen Code sollte ich denn jetzt nehmen und wie geh ich mit mehr als 3 Punkten um?
Und kann mir noch jemand sagen, wie ich diesen code in ein m.file einbauen kann?
Code:
collinear8 = @(varargin) rank(cat(1,varargin{:}) – circshift(cat(1,varargin{:}),1)) == 1;

Ich kann diese Zeile weder lesen noch verstehen. Kann mir hier jemand helfen?
Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.06.2013, 09:41     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
gibt es in Matlab nicht so was wie (convhull hat einen Error, daher bitte überspringen)?

Wenn's weiter nichts ist:
Code:
try
% Aufruf von convhull
catch
% eigene Fehlerbehandlung, sofern gewünscht
end


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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 76
Anmeldedatum: 25.04.12
Wohnort: ---
Version: 2012a
     Beitrag Verfasst am: 01.06.2013, 14:29     Titel:
  Antworten mit Zitat      
Also wenn das so einfach ist. Very Happy
Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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.