|
|
while-Schleife funktioniert nicht |
|
Puschkin |
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 20.06.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.06.2021, 15:28
Titel: while-Schleife funktioniert nicht
|
|
Hallo,
ich möchte für vier items randomisierte Starpositionen auf einem Kreis erzeugen und dabei sicherstellen, dass diese Positionen nicht zu nah an einander liegen. Dafür habe ich folgende while-Schleifen geschrieben, aber bei Ausführen bleibt das Programm immer hängen. Woran liegt es?
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 20.06.2021, 17:07
Titel:
|
|
Hallo,
du aktualisierst die Variablen diff1 etc. in den while-Schleifen nicht.
Ich würde zudem empfehlen, Klammern zu setzen, um sicher zu gehen, dass die Bedingungen in der richtigen Reihenfolge abgearbeitet werden bzw. die Lesbarkeit zu erhöhen. Ich wäre mir nämlich nicht sicher, ob a&b|c&d nun als (a&b)|(c&d) oder als a&(b|c)&d ausgeführt wird.
Wenn deine Zielsetzung ist, Winkel zu bekommen, die sich um min. 20 Grad voneinander unterscheiden, dann sollte dir bewusst sein, dass eine Veränderung von start{2}.ang dazu führen kann, dass diff1 doch wieder klein wird. Zudem kann es passieren, dass ein Winkel auf 359 Grad und ein anderer auf 1 Grad festgelegt wird, was ja aber nur 2 Grad Unterschied sind.
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 ;)
|
|
|
Puschkin |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 20.06.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.06.2021, 17:31
Titel:
|
|
danke für den Hinweis mit den Klammern.
und ja, mein Ziel ist, Winkel zu bekommen, die sich um min. 20 Grad voneinander unterscheiden
"du aktualisierst die Variablen diff1 etc. in den while-Schleifen nicht" - heißt es, die jeweilige Variable wird gar nicht neu berechnet in meinen Schleifen?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 20.06.2021, 17:50
Titel:
|
|
Hallo,
Zitat: |
heißt es, die jeweilige Variable wird gar nicht neu berechnet in meinen Schleifen? |
Nein, warum sollte sie?
Der Code wird der Reihe nach abgearbeitet. Wenn du nicht hinschreibst, dass an einer Stelle eine Variable neu berechnet werden soll, wird das auch nicht gemacht. Ebenso wenig in jeder anderen mir bekannten Programmiersprache.
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 ;)
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 20.06.2021, 19:58
Titel:
|
|
Hallo,
noch ein Vorschlag: es dürfte leichter sein, wenn du
1. ein Array angles = 1:360 mit den verfügbaren Winkeln erstellst
2. einen Winkel daraus auswählst, z.B. mit
angles(randi(length(angles)))
3. diesen Winkel und alle anderen, die "zu nah sind" aus angles entfernst
4. wenn noch weitere Winkel benötigt werden, bei 2. weiter machen.
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 ;)
|
|
|
Puschkin |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 20.06.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.06.2021, 22:27
Titel:
|
|
oh, danke für den Vorschlag, so wäre es sicher eine elegantere Lösung. Aber ich habe den zu spät gesehen und das ganze jetzt so umgebaut:
Hoffe, ich habe nichts übersehen, was verglichen werden muss
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 21.06.2021, 07:55
Titel:
|
|
Hallo,
das wird nicht überprüft:
Zitat: |
Zudem kann es passieren, dass ein Winkel auf 359 Grad und ein anderer auf 1 Grad festgelegt wird, was ja aber nur 2 Grad Unterschied sind. |
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 ;)
|
|
|
Puschkin |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 20.06.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.06.2021, 19:23
Titel:
|
|
Hallo
und danke. Stimmt natürlich, das habe ich übersehen. Verstehe ich das richtig, dass davon alle Fälle betroffen sind, wo die Differenz größer 341 ist (oder kleiner -341), und das wäre dann mit einer zusätzlichen Bedingung zu lösen?
Ich habe auch versucht, deinen Vorschlag zu befolgen, so in etwa:
aber hier wird auch ein Problem entstehen, wenn z. B. a<9 ist oder b>351, oder sehe ich das falsch?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 21.06.2021, 20:20
Titel:
|
|
Hallo,
Zitat: |
und das wäre dann mit einer zusätzlichen Bedingung zu lösen? |
Wäre auf jeden Fall eine Möglichkeit.
Zitat: |
Ich habe auch versucht, deinen Vorschlag zu befolgen, so in etwa: |
Das Problem ist, dass du spätestens bei weiteren Winkeln nicht mehr den Überblick hast, welche der leeren Zellen für was stehen. Ich würde wirklich 1:360 verwenden.
abs hilft, "doppelte" Überprüfungen zu kombinieren.
Statt 1 kannst du dann auch 2, 3, 4 verwenden bzw. eine for-Schleife.
Zitat: |
aber hier wird auch ein Problem entstehen, wenn z. B. a<9 ist oder b>351, oder sehe ich das falsch? |
Ein Problem würde vor allem auch entstehen, weil dabei a negativ und b > 360 werden kann.
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 ;)
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|