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

Algorithmus finden für eine Kontur

 

oneEyed
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 23.11.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.11.2021, 20:51     Titel: Algorithmus finden für eine Kontur
  Antworten mit Zitat      
Guten Tag,

Ich soll einen Algorithmus finden der die richtige Reihenfolge von Punkten ermittelt und diese dann verbindet. Die Aufgabe habe ich hier hochgeladen.
Leider stehe ich aufm Schlauch und weiß gar nicht wie ich das machen soll.
Vielleicht hat jemand ja eine Idee. Danke schon mal.

Mit besten Grüßen

Aufgabe.png
 Beschreibung:

Download
 Dateiname:  Aufgabe.png
 Dateigröße:  115.15 KB
 Heruntergeladen:  147 mal

_________________

Wenn man unsicher ist vergisst man zu wissen was mein weiß und weiß das was man denkt zu wissen.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.11.2021, 22:45     Titel:
  Antworten mit Zitat      
Hallo,

der erste Schritt dürfte der Algorithmus sein, der zweite die Implementierung.
Eine Möglichkeit für den Algorithmus, die ich sehe:
1. Startpunkt ist Liste mit allen Punkten
2. Eine zweite Liste mit einem beliebigen Punkt anfangen
3. solange die erste Liste mehr als einen Punkt enthält
a) den momentanen Punkt entfernen
b) den diesem Punkt am nächstgelegenen Punkt zum momentanen Punkt machen.
Vielleicht fällt dir auch was besseres ein.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
oneEyed
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 23.11.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2021, 21:48     Titel:
  Antworten mit Zitat      
Danke für deine Antwort, so wollte ich das jetzt mal versuchen. Halt einfach das er immer zum Nächstliegenden Punkt geht. Ich probiere mich mal dran.

Mit besten Grüßen
_________________

Wenn man unsicher ist vergisst man zu wissen was mein weiß und weiß das was man denkt zu wissen.
Private Nachricht senden Benutzer-Profile anzeigen
 
oneEyed
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 23.11.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2021, 23:26     Titel:
  Antworten mit Zitat      
Moin nochmal !

Leider komm ich da nicht so richtig weiter mir fällt nicht ein wie ich diesen Algorithmus umsetze. Versuche das mit einer for schleife zu realisieren aber was richtiges zusammen bekomme ich da nicht.
Kann mir einer vielleicht dabei helfen ?

Mit besten Grüßen
_________________

Wenn man unsicher ist vergisst man zu wissen was mein weiß und weiß das was man denkt zu wissen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

wie soll man dir denn genau helfen?

Poste doch bitte, was du versucht hast. Stelle nach Möglichkeit einen Beispieldatensatz zur Verfügung und beschreibe bitte genau, was nicht so klappt wie es soll.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
oneEyed
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 23.11.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2021, 00:36     Titel:
  Antworten mit Zitat      
Hi,

das was ich vorhab ist es ja den einen Punkt xx(1) mit den anderen Punkten zu vergleichen um so zu gucken welcher dieser Punkte am nächsten zu meinen Vergleichs Punkt xx(1) liegt. Deswegen habe ich halt das hier gemacht m(k) = min(abs(xx(:,k+1) - liste)); der wert der am nächsten bei null liegt ist der der am nächsten an meinem xx(1) wert liegt. Aber wenn ich jetzt das Ergebnis bekommen und sehe ich sage mal der Punkt xx(5) am nächsten an meinem Punkt xx(1) liegt wie sage ich Matlab das er diesen Punkt nehmen und meinen Punkt xx(1) und die verbinden soll? Denn gut das klappt bei kleineren Datenmengen das ich ihn das manuell sage aber ich will das ja gerne in einer for-Schleife realisieren und Matlab soll das selbst immer wissen wie weitergeht. Denn ich den nächsten Punkt gefunden habe muss er ja wieder diesen mit den anderen vergleichen usw.

Und daran scheitert es grad ziemlich denn ich weiß nicht wie ich das anfangen soll. Ich hab halt nicht so ganz die Vorstellung wie ich Matlab diese sachen sagen kann.



Code:
close all;clc; clear;

xx=[0.6200,0.6200,0.4050,1.0000,0.4670,0.6240,0.3770,0.3790,-0.0512,0.3990,0.4150,0.3790,0.1180,1.0900,0.9180,0.6040,0.4680,0.5960,0.9830,0.5270,0.7240,0.4000,0.3530,0.7900,0.6650,1.0000,0.1180,0.4050,1.1100,0.5950,0.6180,0.6220,-0.0512,1.0700,0.3770,0.2460,0.5820,0.0069,0.3540,0.7330,0.8560,0.5810,0.5280,0.9680,0.8590,0.4150,0.2460,0.5920,0.0069,-0.0701,0.6360];
yy=[0.3470,0.0383,0.3220,0.3330,1.0300,0.8720,0.9560,0.1420 0.3990,0.2440,1.0100,0.8590,0.3130,0.5050,0.3140,0.7710,-0.0313,0.2360,0.6660,1.0300,0.3470,0.7570,0.6480,0.3350,0.3530,0.3330,0.6870,0.6780,0.6070,0.6860,0.1330,0.9630,0.6010,0.6560,0.0448,0.3350,-0.0143,0.3290,0.3520,0.6320,0.3230,1.0100,-0.0320,0.3160,0.6510,-0.0122,0.6650,0.3170,0.6710,0.5000,0.6360];
 
scatter(xx,yy);grid on;%xlim([-2,2]);ylim([-2,2]);
L=length(xx);
hold on

for k=1:L-1

liste=xx(1);
m(k) = min(abs(xx(:,k+1) - liste));
a=min(m);


       
end
 

_________________

Wenn man unsicher ist vergisst man zu wissen was mein weiß und weiß das was man denkt zu wissen.
Private Nachricht senden Benutzer-Profile anzeigen
 
oneEyed
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 23.11.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2021, 11:40     Titel:
  Antworten mit Zitat      
Moin !

bin jetzt etwas weiter gekommen habe das jetzt so gemacht und es funktioniert auch es kommt ein punkt raus der am nächsten an meinem startpunkt liegt. nun möchte ich aber direkt mit diesen punkten den vorgang wiederholen in der for schleife. aber ich kann sie nicht direkt in die for schleife einsetzen da sonst meine startpunkte zu früh überschritten werden. Hat jemand eine idee?

Mit besten Grüßen




Code:
close all;clc; clear;

xx=[0.6200,0.6200,0.4050,1.0000,0.4670,0.6240,0.3770,0.3790,-0.0512,0.3990,0.4150,0.3790,0.1180,1.0900,0.9180,0.6040,0.4680,0.5960,0.9830,0.5270,0.7240,0.4000,0.3530,0.7900,0.6650,1.0000,0.1180,0.4050,1.1100,0.5950,0.6180,0.6220,-0.0512,1.0700,0.3770,0.2460,0.5820,0.0069,0.3540,0.7330,0.8560,0.5810,0.5280,0.9680,0.8590,0.4150,0.2460,0.5920,0.0069,-0.0701,0.6360];
yy=[0.3470,0.0383,0.3220,0.3330,1.0300,0.8720,0.9560,0.1420 0.3990,0.2440,1.0100,0.8590,0.3130,0.5050,0.3140,0.7710,-0.0313,0.2360,0.6660,1.0300,0.3470,0.7570,0.6480,0.3350,0.3530,0.3330,0.6870,0.6780,0.6070,0.6860,0.1330,0.9630,0.6010,0.6560,0.0448,0.3350,-0.0143,0.3290,0.3520,0.6320,0.3230,1.0100,-0.0320,0.3160,0.6510,-0.0122,0.6650,0.3170,0.6710,0.5000,0.6360];
 
scatter(xx,yy);grid on;%xlim([-2,2]);ylim([-2,2]);
L=length(xx);
hold on
listex=xx(1);
listey=yy(1);
for k=1:L-1

m(k)=sqrt((xx(k+1)-listex(1))^2+(yy(k+1)-listey(1))^2);%norm([xx(k+1),yy(k+1)]-[liste(1),yy(1)])
a=min(m);
pos=find(m==a);

end
listex=xx(pos+1);
listey=yy(pos+1);

_________________

Wenn man unsicher ist vergisst man zu wissen was mein weiß und weiß das was man denkt zu wissen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

den nächsten aller Punkte zu einem Punkt kann man auch schön ohne Schleife berechnen:
Code:
m=sqrt((xx-listex(1)).^2+(yy-listey(1)).^2);
[a, pos]=min(m);

Um das herum würde ich nun eine for (oder besser while-) Schleife schreiben. Statt mit listex(1) und listey(1) zu arbeiten, würde ich mit einem currentX und currentY arbeiten, denen am Anfang listex(1) und listey(1) zugewiesen werden.
Es kann helfen, sich konsequent an den von mir vorgeschlagenen Ablauf zu halten.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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 - 2024 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.