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

Kreis zeichnen

 

greg1983
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 13.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.05.2011, 14:43     Titel: Kreis zeichnen
  Antworten mit Zitat      
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?

Vielen dank für eure Hilfe!

Schönen Gruß und schon mal ein schönes
Wochenende

Gregor
Private Nachricht senden Benutzer-Profile anzeigen


eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 20.05.2011, 15:17     Titel:
  Antworten mit Zitat      
Die schöne Funktion gibt es im File Central und heißt "circle".
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 20.05.2011, 15:43     Titel:
  Antworten mit Zitat      
Hallo,

oder wenn du z.B. einen gefuellten Kreis in eine Matrix (Bild) zeichnen moechtest, koenntest du es mit der Kreisgleichung folgendermassen loesen:

Code:

Matrix = zeros(100,100);
XM = 60;
YM = 30;
R = 20;

[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;
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
TingltanglBob
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 13.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.09.2011, 19:28     Titel:
  Antworten mit Zitat      
Hallo,

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;

bedanke mich im voraus TingltanglBoB
Private Nachricht senden Benutzer-Profile anzeigen
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 14.09.2011, 19:43     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
theone
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 24.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2019, 13:23     Titel:
  Antworten mit Zitat      
Hallo zusammen,

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

Code:
data = (x-YM).^2+(y-XM).^2;


folgende Fehlermeldung: Matrix dimensions must agree.

Hat jemand eine Idee woran das liegen könnte? Keine der Variablen habe ich vorher im Programm verwendet, sodass sie einen anderen Wert haben könnte.

Vielen Dank im Voraus
theone
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: 30.07.2019, 14:02     Titel:
  Antworten mit Zitat      
Hallo,

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
theone
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 24.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2019, 14:48     Titel:
  Antworten mit Zitat      
Hallo,

der Code ist eigentlich wie oben. bw1 ist ein binäres Bild mit handgezeichneten Kreisen.

Code:
scal=imresize(picture,[866 600]);
scalx=size(scal,1);
scaly=size(scal,2);
gray=rgb2gray(scal);
bw1=imbinarize(gray,0.5);

[centers,radii]=imfindcircles(bw1,[20,60],'ObjectPolarity','dark',...
    'Sensitivity',0.8,'Method','twostage');
imshow(scal);
h=viscircles(centers,radii);

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;


Liebe Grüße
theone
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: 30.07.2019, 15:48     Titel:
  Antworten mit Zitat      
Hallo,

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;


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
 
theone
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 24.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2019, 17:35     Titel:
  Antworten mit Zitat      
Hallo,

das war ein wirklich guter Hinweis. Nur leider bekomme ich jetzt folgende Fehlermeldung:

Code:
Error using  ^  (line 51)
Incorrect dimensions for raising a matrix to a power. Check that the matrix is square and
the power is a scalar. To perform elementwise matrix powers, use '.^'.

Error in kreis_erkennen_programm (line 75)
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?

Liebe Grüße
theone
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: 30.07.2019, 20:25     Titel:
  Antworten mit Zitat      
Hallo,

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
theone
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 24.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2019, 12:39     Titel:
  Antworten mit Zitat      
Hey,

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.

Liebe Grüße
theone
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: 31.07.2019, 13:21     Titel:
  Antworten mit Zitat      
Hallo,

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
theone
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 24.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2019, 13:43     Titel:
  Antworten mit Zitat      
Hallo,


Code:
picture=imread('prinzipsskizze_selbstgezeichnet2.jpeg');
gray=rgb2gray(picture);
bw=imbinarize(gray,0.5);
bw=~bw;
labeled = bwlabel(bw);
stats=regionprops(labeled,'BoundingBox')
for j=1:numel(stats)
    if abs((stats(j).BoundingBox(3)-stats(j).BoundingBox(4))) < 3 && ...
            (0.6<stats(j).Extent && stats(j).Extent<1)


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?

Code:
circle = data<=R^2;

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?

Liebe Grüße
theone
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: 31.07.2019, 14:12     Titel:
  Antworten mit Zitat      
Hallo,

z.B.
Code:
R = radii(1)

oder
Code:


Generell darf ich mal auf das MATLAB Onramp verweisen. Da kannst du dir systematisch ein paar Grundkenntnisse aneignen.
https://www.mathworks.com/learn/tutorials/matlab-onramp.html

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

Gehe zu Seite 1, 2  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 - 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.