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.
Vielleicht hat jemand einen Hinweiß für mich. Wäre sehr dankbar.
Derak
Gast1
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 22.08.2011, 13:54
Titel:
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')
das ging aber schnell mit der Antwort. 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
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')
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
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
Gast1
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 22.08.2011, 16:20
Titel:
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
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)=[102030405060708090100110120130140150160170];
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
Es geht vielleicht auch etwas kürzer aber der Code tut was er soll.
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
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.