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

Polygon festlegen anhand Winkel und Längen

 

chris4aus

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.09.2011, 02:41     Titel: Polygon festlegen anhand Winkel und Längen
  Antworten mit Zitat      
Hallo!

Ich versuche ein Polygon zu zeichnen.
Ich habe zwar impoly gefunden, weiß aber nicht, wie ich es programiere zu tun, was ich vorhabe:

Ich habe ein Quadrat mit Länge L,
dieses rotiere ich um einen bestimmten Winkel, der 180 ganzzahlig teilt (ich probiere 30°,45°,60° und 90° im Moment) und möchte dann die innersten Linien als mein Polygon zeichnen --> Das ist die Fläche, die ich nutzen kann.

Ich möchte diese Linien gerne in Matlab code haben, oder die Ecken, da ich diese später noch brauche.

Ich hoffe, jemand hat eine Idee, da ich zwar das Quadrat rotieren kann, aber nur, wenn ich die Punkte manuell eingebe.

Code:

R = [cosd(phi),-sind(phi),0;sind(phi),cosd(phi),0;0,0,1 ];
% dritte Spalte für Geschwindigkeit - hier irrelevant
i_max = [-0.5 -0.5 0; 0.5 -0.5 0; 0.5 0.5 0; -0.5 0.5 0; -0.5 -0.5 0];
line(i_max(:,1),i_max(:,2));
hold on;
i_max_rot = i_max*R;
line(i_max_rot(:,1),i_max_rot(:,2));
hold off;
 


chris4aus

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2011, 02:12     Titel: Loesung
  Antworten mit Zitat      
Hallo!

Nach langem Rumprobieren, bin ich jetzt soweit, dass ich das Polygon zeichnen kann:

Code:

angle = input('angle: ');
width = 35;

axis_dim = width*1.3;
axis([-axis_dim axis_dim -axis_dim axis_dim]);
axis equal;
geom_square = [-width/2 -width/2;width/2 -width/2;width/2 width/2;-width/2 width/2;-width/2 -width/2];
line(geom_square(:,1),geom_square(:,2));

hold all;
for phi = 180-angle:-angle:angle
    % Rotation matrix (clockwise), uses the angle from user input in function call
    R = [-cosd(phi),sind(phi),0;sind(phi),cosd(phi),0 ];
    rot_square = geom_square*R;
    line(rot_square(:,1),rot_square(:,2));
end

if angle == 60 % if angle is 60 degrees
    angle = 30;
end
n = 360/angle;
length = (width)*tand(180/n);

X = zeros(1,n/4+2);
Y = zeros(1,n/4+2);

X(1)=0;
Y(1)=width/2;
X(2) = -length/2;
Y(2) = width/2;
% quarter of geometry
for pos=1:(n-4)/4 % angled sides
    X(pos+2) = X(pos+1) - cosd(pos*angle)*length;
    Y(pos+2) = Y(pos+1) - sind(pos*angle)*length;
end % rest
if angle == 90 % 90 degrees has no angled sides
    pos = 0;
end
% vertical direction
X(pos+3) = X(pos+2);
Y(pos+3) = Y(pos+2) - length/2;
%mirror geometry to get half
X = [X X(end:-1:1)];
Y = [Y -Y(end:-1:1)];
%mirror geometry to get full polygon
X = [X -X(end:-1:1)];
Y = [Y Y(end:-1:1)];

poL = line(X,Y);
set(poL,'Color', 'm','LineWidth',2);
 


Es funktionert fuer Winkel, die 180 teilen.

Gruss,
Christiane

P.S.: Die ersten Zeilen sind nur zum Quadrat zeichnen und rotieren.
 
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 - 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.