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 plotten mit senkrechten Marker und Winkelangabe

 

Derak
Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 23.10.08
Wohnort: BZ
Version: R14
     Beitrag Verfasst am: 22.08.2011, 13:42     Titel: Kreis plotten mit senkrechten Marker und Winkelangabe
  Antworten mit Zitat      
Hallo Leute,

und zwar bin ich gerade dabei einen Kreis in Matlab zu plotten, welcher verschiedene Markerstriche entlang seiner Strecke aufweist.

Das ist derzeit mein Code:
Code:

figure(1)
clc
close all
t=0:0.1:2*pi;
x=cos(t);
y=sin(t);
plot(x,y,'r');
hold on;
for t=0:0.1:pi
    x=cos(t);
    y=sin(t);
    line([x;x], [y;y+0.15],'Color','red')
end
for t=pi:0.1:2*pi
    x=cos(t);
    y=sin(t);
    line([x;x], [y;y-0.15],'Color','red')
end
axis equal;
 


Soweit schonmal nicht schlecht. Allerdings möchte ich nun zum einen den Radius des Kreises noch ändern können und zum anderen sollten die Striche, welche jetzt genau senkrecht zur X-Achse stehen, senkrecht zum Kreisbogen sein.

Ziel des ganzen soll es sein einen Ring dazustellen, auf dem die Winkel von 0° bis 380° durch Striche (Markierungen) und die entsprechende Werte abgetragen sind.

Derzeit hänge ich an dem Problem das ich die Striche nicht senkrecht zum Kreisbogen ausgerichtet bekomme. Confused

Vielleicht hat jemand einen Hinweiß für mich. Wäre sehr dankbar.

Derak
Private Nachricht senden Benutzer-Profile anzeigen


Gast1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.08.2011, 13:54     Titel:
  Antworten mit Zitat      
Hi,


Code:

figure
t=linspace(0,2*pi,360); % linspace finde ich hier besser, man kann
                                   %genau einstellen, wieviele Punkte man will
x=cos(t);
y=sin(t);
plot(x,y,'r');
hold on;

% Striche plotten
% Die Idee hierbei ist, die Koordinaten der Striche einfach aus 2 Kreisen % zu berechnen, einer etwas größer, einer etwas kleiner als der
% Orginalkreis
n=9;    % Anzahl der Striche + 1
s=linspace(0,2*pi,n);
line([1.05*cos(s);0.95*cos(s)], [1.05*sin(s);0.95*sin(s)],'Color','red')


 
 
Derak
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 23.10.08
Wohnort: BZ
Version: R14
     Beitrag Verfasst am: 22.08.2011, 14:32     Titel:
  Antworten mit Zitat      
Hallo,

das ging aber schnell mit der Antwort. Laughing und es ist auch genau das was ich wollte.
Vielen Dank für die Hilfe.

Was mir nun noch zur Komplettierung fehlt, sind die Werte um den Kreis. Hab schon versucht die Zahlenwerte von 0 bis 360° irgend wie dran zu bekommen aber bisher ohne erfolgt.

Vielleicht gibt es dazu noch eine kleine Hilfestellung Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Derak
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 23.10.08
Wohnort: BZ
Version: R14
     Beitrag Verfasst am: 22.08.2011, 15:52     Titel:
  Antworten mit Zitat      
Also habs jetzt soweit hinbekommen. Hier der Code den ich jetzt hab.

Code:

figure(1)
clc
close all

%radius
r=7.9375;

t=linspace(0,2*pi,360); % linspace finde ich hier besser, man kann
%genau einstellen, wieviele Punkte man will
x=cos(t)*r;
y=sin(t)*r;
plot(x,y,'r');
hold on;
% Striche plotten
% Die Idee hierbei ist, die Koordinaten der Striche einfach aus 2 Kreisen % zu berechnen, einer etwas größer, einer etwas kleiner als der
% Orginalkreis
 n=37;    % Anzahl der Striche + 1
 s=linspace(0,2*pi,n);
 line([1.05*cos(s)*r;0.95*cos(s)*r], [1.05*sin(s)*r;0.95*sin(s)*r],'Color','red')
 
 k=0:10:360;
 for l=1:(n-1);
 text(1.13*cos(s(l))*r-0.1,1.09*sin(s(l))*r,num2str(k(l)))
 end
 axis ([-10 10 -10 10])
 



Ich bekomme jetzt die Markierungen richtig angezeigt und an jede auch den entsprechenden Wert.

Als Feinschliff würde ich mir jetzt noch wünschen, dass der Text nicht horizontal geschrieben, sondern um den Kreis herum geplottet wird.

Da sich mein Radius ändert, musste ich feststellen, dass der "Kreisbogen" auf dem sich der Text befindet, nicht im gleichen Verhältnis skalliert wird, wie der Bogen mit den Strichen. Ich muss daher immer manuell unter dem Befehl
Code:
einen Korrekturwert eintragen. In dem Beispiel die -0.1. Das bewirkt ein Verschieben des Textes in negativer X-Richtung. Damit passt wieder alles. Es ist aber sehr nervig.


Gibt es für die zwei offenen Probleme zufällig Lösung oder wird das in der Umsetzung zu komplex?

Trotzdem vielen Dank für die Unterstützung Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.08.2011, 16:20     Titel:
  Antworten mit Zitat      
Hi,

Ich denke ein um den Kreis plotten der Beschriftung löst auch dein Korrekturwertproblem:

Code:

k=0:10:360;
for i=1:(n-1)/4+1
    text(1.09*cos(s(i))*r,1.09*sin(s(i))*r,num2str(k(i)),'rotation',k(i));
end
for i=(n-1)/4+2:3*(n-1)/4+1
    text(1.09*cos(s(i))*r,1.09*sin(s(i))*r,num2str(k(i)),'rotation',180+k(i),'horizontalalignment','right');
 
end
for i=3*(n-1)/4+2:n-1
    text(1.09*cos(s(i))*r,1.09*sin(s(i))*r,num2str(k(i)),'rotation',k(i));
 
end
% die for-Schleife musste ich aufteilen, sonst waren einige Zahlen auf dem Kopf, bin mir aber nicht sicher wie es am "schönsten" ist

 
 
Derak
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 23.10.08
Wohnort: BZ
Version: R14
     Beitrag Verfasst am: 24.08.2011, 16:25     Titel:
  Antworten mit Zitat      
Jetzt funktioniert es genau so wie ich es wollte. Vielen dank für die Unterstützung.

Der Vollständigkeit halber.

Code:

function Kreis_mit_Beschriftung

%feste Parameter
clc
clear all
close all

k = double(7.9375);       %Radius
kbild = 280;               %Radius im Bild
m = 37;                   % Anzahl der Striche + 1
m_xy_im=[500,500];

figure(1);
hold on;
t=linspace(0,2*pi,360); % linspace finde ich hier besser, man kann genau einstellen, wieviele Punkte man will
x=m_xy_im(1)+cos(t)*kbild;
y=m_xy_im(2)+sin(t)*kbild;
plot(x,y,'r');
hold on;

% Striche plotten
% Die Idee hierbei ist, die Koordinaten der Striche einfach aus 2 Kreisen % zu berechnen, einer etwas größer, einer etwas kleiner als der
% Orginalkreis

s=linspace(0,2*pi,m);
line([m_xy_im(1)+1.05*cos(s)*kbild;m_xy_im(1)+0.95*cos(s)*kbild], [m_xy_im(2)+1.05*sin(s)*kbild;m_xy_im(2)+0.95*sin(s)*kbild],'Color','r')
hold on;
k1=0:10:360;
k2(1:19)=0;
k2(20:36)=[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170];

for i=1:(m-1)/4+1
    text(m_xy_im(1)+1.09*cos(s(i))*kbild,m_xy_im(2)+1.09*sin(s(i))*kbild,num2str(k1(i)),'rotation',k1(i),'Color','b','FontWeight','bold');
end
for i=(m-1)/4+2:9+(m-1)/4+1
    text(m_xy_im(1)+1.09*cos(s(i))*kbild,m_xy_im(2)+1.09*sin(s(i))*kbild,num2str(k1(i)),'rotation',k1(i),'Color','b','FontWeight','bold');
end
for i=(m-1)/4+11:(m-1)/2+10
    text(m_xy_im(1)+1.09*cos(s(i))*kbild,m_xy_im(2)+1.09*sin(s(i))*kbild,num2str(k2(i)),'rotation',k1(i),'Color','b','FontWeight','bold');
end
for i=3*(m-1)/4+2:m-1
    text(m_xy_im(1)+1.09*cos(s(i))*kbild,m_xy_im(2)+1.09*sin(s(i))*kbild,num2str(k2(i)),'rotation',k1(i),'Color','b','FontWeight','bold');
end

axis ([0 1000 0 1000])
 


Es geht vielleicht auch etwas kürzer aber der Code tut was er soll.

Wink
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.