Verfasst am: 20.05.2011, 13:43
Titel: Kreis zeichnen
Hi,
ich will in Matlab einen Kreis plotten. Ich habe den Mittelpunkt des Kreises (liegt irgendwo in der zweidimensionalen ebene) und ich habe auch den Radius des Kreises.
Da gibts doch mit Sicherheit in Matlab ne schöne Funktion wo ich das einfach eintragen kann und der Kreis wird geplottet?
ich hatte auch das selbe problemaber dank sco wurde es einigermassen gelöst aber jetzt habe ich ein anderes Problem und zwar kenne ich mich bei diesem teil des Quellcodes bicht aus...eineerklärung wäre wahnsinn
[a,b] = size(Matrix);
x = repmat((1:a)',1,a);
y = repmat(1:b,b,1);
data = (x-YM).^2+(y-XM).^2;
circle = data<=R^2;
1) Siehe Hilfe zu size()
2) Siehe x/y im Array-Editor an, dann wird klar, was damit gemacht wird (ein einfaches Grid)
3) Einfache Addition
4) Zu der Variable circle gehören nur Werte in data die kleiner-gleich R^2 sind
ich habe den Code auch verwendet und er hat anfangs einwandfrei funktioniert. Wenn ich ihn jedoch in ein anderes Programm kopiere bekomme ich bei der Zeile
um dir die Frage beantworten zu können, müssten wir dieses andere Programm vor uns haben. Was sind denn im neuen Programm die Werte und vor allem die Dimensionen von x, y, XM und YM?
Zitat:
Keine der Variablen habe ich vorher im Programm verwendet, sodass sie einen anderen Wert haben könnte.
Irgendwie müssen die Variablen ja definiert sein, sonst würde sich MATLAB beklagen, dass es die Variablen nicht kennt. Und wenn das Verhalten dieses Programms anders ist, dann muss eigentlich mindestens eine der am Befehl beteiligten Variablen auch anders belegt sein.
Es wäre hilfreich, wenn du den Code bzw. einen reproduzierbaren Teil davon zur Verfügung stellen kannst.
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 ;)
matrix = zeros(scalx,scaly);
XM = centers(1);
YM = centers(2);
R = radii;
[a,b] = size(matrix);
x = repmat((1:a)',1,a);
y = repmat(1:b,b,1);
matrix1=(x-YM).^2;
matrix2=(y-XM).^2;
data = (x-YM).^2+(y-XM).^2;
circle = data<=R^2;
m.E. ein Fehler im originalen Code, so dass er nur für quadratische Matrizen funktioniert. Vorschlag:
Code:
[a,b] = size(Matrix);
x = repmat((1:a)',1,b); % <-- einmal b statt a
y = repmat(1:b,a,1); % <-- einmal a statt b
data = (x-YM).^2+(y-XM).^2;
circle = data<=R^2;
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 ;)
das war ein wirklich guter Hinweis. Nur leider bekomme ich jetzt folgende Fehlermeldung:
Code:
Error using ^ (line51)
Incorrect dimensions for raising a matrix to a power. Check that the matrix is square and
the poweris a scalar. To perform elementwise matrix powers, use '.^'.
Error in kreis_erkennen_programm (line75)
circle = data<=R^2;
line 51 bezieht sich auf die Funktion mpower.m, die ich noch nie vorher gesehen habe. Von mir ist die also nicht.
Da hat man ein Problem gelöst und dann kommt schon das nächste. Ist es denn für das weiterführende Programm ein Problem, dass die Matrizen nicht quadratisch sind?
was ist denn R? Schau mal im Workspace nach.
Es sollte an sich ein Skalar sein. Eventuell musst du ein Element aus radii auswählen.
Zitat:
Ist es denn für das weiterführende Programm ein Problem, dass die Matrizen nicht quadratisch sind?
Ich würde keine Probleme erwarten. Bilder sind nun mal meist nicht quadratisch.
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 ;)
das R ist der Radius. Ist es eventuell problematisch, dass auf dem Bild mehrere Kreise sind? ich habe das Programm in eine for-Schleife gepackt, die alle Objekte auf dem Bild erfasst.
ich hätte genauer sagen sollen: was sind die Dimensionen von R?
Zitat:
Ist es eventuell problematisch, dass auf dem Bild mehrere Kreise sind?
Nein, aber du solltest dir überlegen, wie du die Kreise nacheinander abarbeiten willst. Auf einmal wird nicht gehen.
Zitat:
ich habe das Programm in eine for-Schleife gepackt, die alle Objekte auf dem Bild erfasst.
Bitte generell Code posten statt ihn zu beschreiben.
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 ;)
die Frage nach der Dimension vom Radius ist wirklich gut gewesen! Da ist drei Kreise habe, besteht der Radius aus einem 3x1 Vektor. Wie kann ich hier am schnellsten auf die einzelnen Werte zugreifen?
am sinnvollsten wäre es R immer gleich zu haben, deswegen würde ich R am liebsten neu definieren und dafür den Mittelwert aller Werte nehmen. Wie kann ich denn auf die Teilwerte des Vektors zugreifen, auch für den Fall, dass ich nicht genau drei Kreise habe?
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 ;)
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
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.