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

Körper drehen

 

ElLarso

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2011, 21:00     Titel: Körper drehen
  Antworten mit Zitat      
Hi,

ich habe gerade ein kleines Problem bei der Programmierung von Matlab.
Unsere Aufgabe besteht darin, ein GUI zu erstellen, sodass verschiedene 3D-Körper in einem extra Fenster angezeigt werden und man mit Hilfe dieses GUI´s die Körper in jede Richtung verschieben kann, die Skalierung ändern kann und die Körper um jede Achse drehen kann.

Die Darstellung der Körper, die Verschiebung und der allgemeine Aufbau des GUI´s sind kein Problem und klappen auch....
Leider habe ich nur Probleme mit der Skalierung und der Rotation....
Vielleicht kann mir ja einer ein paar Tipps geben....
Vielen, vielen Dank für Eure Hilfen.

Im Folgenden werde ich mal die einzelnen Funktionen und das GUI angeben:

Das Bedieninterface:

Code:

function varargout = bedieninterface_do(varargin)
% BEDIENINTERFACE_DO M-file for bedieninterface_do.fig
%      BEDIENINTERFACE_DO, by itself, creates a new BEDIENINTERFACE_DO or raises the existing
%      singleton*.
%
%      H = BEDIENINTERFACE_DO returns the handle to a new BEDIENINTERFACE_DO or the handle to
%      the existing singleton*.
%
%      BEDIENINTERFACE_DO('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in BEDIENINTERFACE_DO.M with the given input arguments.
%
%      BEDIENINTERFACE_DO('Property','Value',...) creates a new BEDIENINTERFACE_DO or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before bedieninterface_do_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to bedieninterface_do_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help bedieninterface_do

% Last Modified by GUIDE v2.5 11-Jul-2011 14:11:45

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @bedieninterface_do_OpeningFcn, ...
                   'gui_OutputFcn',  @bedieninterface_do_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before bedieninterface_do is made visible.
function bedieninterface_do_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to bedieninterface_do (see VARARGIN)
global h
h = handles;
% Choose default command line output for bedieninterface_do
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes bedieninterface_do wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = bedieninterface_do_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes during object creation, after setting all properties.
function panel1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to panel1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called
set (hObject, 'SelectionChangeFcn', @sel_body);

function sel_body(source, eventdata)
global b
rb_Koerper = get(eventdata.NewValue,'Tag')

switch rb_Koerper
case 'rb_q'
    b = Quader(5,5,8);
case 'rb_p'
    b = Pyramide(5,5,8);
case 'rb_d'
    b = Dreieck(5,5,8);
case 'rb_t'
    b = Tetraeder(5,5,8);
case 'rb_o'
    b = Octaeder(5,5,8);
case 'rb_i'
    b = Initiale(5,5,8);
otherwise
        disp('Fehler bei Körperauswahl');
end
Zeichnen(b)
   
 


% --- Executes on slider movement.
function slider1_Callback(hObject, eventdata, handles)
% hObject    handle to slider1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider
%        get(hObject,'Min') and get(hObject,'Max') to determine range of slider


% --- Executes during object creation, after setting all properties.
function slider1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to slider1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: slider controls usually have a light gray background.
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor',[.9 .9 .9]);
end
addlistener(hObject,'Action', @Schieberegler)

function Schieberegler(hObject, eventdata)
global rb_transfer b R Q
Wert = get(hObject, 'Value');
Wert = Wert - 0.5;
Wert = (Wert)*10;

switch rb_transfer
    case 'rb_tx'
            R = Translation (b, Wert,0,0);
            %Zeichnen (bb, Xo);
    case 'rb_ty'
           
            R = Translation (b, 0,Wert,0);
            %Zeichnen (bb, Yo);
    case 'rb_tz'
            R = Translation (b, 0,0,Wert);
            %Zeichnen (bb, Zo);
end
Zeichnen(R)
%addlistener(hObject,'Action', @Schieberegler)


% --- Executes during object creation, after setting all properties.
function panel2_CreateFcn(hObject, eventdata, handles)
% hObject    handle to panel2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called
set (hObject, 'SelectionChangeFcn', @sel_transformation);

function sel_transformation(source, eventdata)
global rb_transfer
rb_transfer = get(eventdata.NewValue,'Tag')


% --- Executes on button press in checkbox1.
function checkbox1_Callback(hObject, eventdata, handles)
% hObject    handle to checkbox1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox1
if (get(h.checkbox1,'Value') == get(h.checkbox1,'Max'))
   global R Q
    Q = R;
    Q = Translation (Q, Wert,Wert,Wert);
 
%     switch Q
%     case 'rb_tx'
%             Q = Translation (Q, Wert,0,0);
%             %Zeichnen (bb, Xo);
%     case 'rb_ty'
%            
%             Q = Translation (Q, 0,Wert,0);
%             %Zeichnen (bb, Yo);
%     case 'rb_tz'
%             Q = Translation (Q, 0,0,Wert);
%             %Zeichnen (bb, Zo);
% end
% Zeichnen(Q)
   
   
   
else
   
    Q = b;
    Zeichnen(R)
   % Checkbox is not checked-take approriate action
end


% --- Executes during object creation, after setting all properties.
function rb_q_CreateFcn(hObject, eventdata, handles)
% hObject    handle to rb_q (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called


% --- Executes during object creation, after setting all properties.
function rb_t_CreateFcn(hObject, eventdata, handles)
% hObject    handle to rb_t (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called


% --- Executes during object creation, after setting all properties.
function rb_tx_CreateFcn(hObject, eventdata, handles)
% hObject    handle to rb_tx (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

 



Funktion Dreieck:

Code:

function body = Dreieck(x,y,z)
     %Punkten 1  2  3  4  5    6
    body.p = [0, x, x, 0, x/2, x/2;...
              0, 0, y, y, y,   0;...
              0, 0, 0, 0, z,   z];

     %Linien  1  2  3  4  5  6  7  8  9
    body.l = [1, 2, 3, 4, 4, 1, 2, 3  6;...
              2, 3, 4, 1, 5, 6, 6, 5, 5];
 


Die für die anderen Körper spare ich mir mal...


Funktion Rotation:

Code:

%Drehung
function Gedreht = Rotation(grad, Ax, body)

Gedreht = body;

D = zeros(3);

switch Ax
    case 'x'
        D(1,1) = 1            ;
        D(2,2) = cosd(grad)   ;
        D(2,3) = -sind(grad)  ;
        D(3,2) = sind(grad)   ;
        D(3,3) = cosd(grad)   ;
    case 'y'
    case 'z'
end

Gedreht.p = D*body.p
 


Funktion Skalierung:

Code:

%Skalierung
function skaliertes = Skalierung(body,f)
skaliertes=body;
skaliertes.p = f*body.p;
 



Funktion Translation:

Code:

%Verschiebung

function Verschiebtes = Translation(body, dX, dY, dZ)
Verschiebtes = body;
for i=1: size(body.p,2)
   
 Verschiebtes.p (:,i)= body.p (:,i) + [dX; dY;dZ];
end
 


Funktion Zeichnen:

Code:

function Zeichnen(body)
figure(1)
clf
for Linie = 1: size(body.l,2)
    plot3([body.p(1,body.l(1,Linie)), body.p(1,body.l(2,Linie))],...
          [body.p(2,body.l(1,Linie)), body.p(2,body.l(2,Linie))],...
          [body.p(3,body.l(1,Linie)), body.p(3,body.l(2,Linie))]);
     
      hold on;
end;

%plot ([10 0], [0 0])
%plot ([-10 0], [0 0])
plot3 ([-10 10], [0 0],[0 0], 'r');
plot3 ([0 0], [-10 10], [0 0], 'g');
plot3 ([0 0], [0 0], [-10 10], 'k');
 


lilov
Forum-Century

Forum-Century


Beiträge: 193
Anmeldedatum: 05.05.10
Wohnort: Bremerhaven
Version: ---
     Beitrag Verfasst am: 12.07.2011, 00:45     Titel:
  Antworten mit Zitat      
hi,

es scheint als wäre deine Funktion für Rotation falsch. Du brauchst 3 Rotationsmatrizen wenn du um alle 3 Achsen drehen willst:


Code:


phi = 45*pi/180; % deg to rad

vec = rand(100,3);


Rx = [1 0 0;0 cos(phi) -sin(phi);0 sin(phi) cos(phi)];

Ry = [cos(phi) 0 sin(phi);0 1 0;-sin(phi) 0 cos(phi)];

Rz = [cos(phi) -sin(phi) 0;sin(phi) cos(phi) 0;0 0 1];


vecR = (Rz*Rx*Ry*vec')';
 


Gruß,
lilov
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.07.2011, 02:11     Titel: Re: Körper drehen
  Antworten mit Zitat      
Hallo ElLarso,

Zitat:
Leider habe ich nur Probleme mit der Skalierung und der Rotation....

Welche Probleme hast Du denn genau? Meistens enthält eine exakte Beschreibung der probleme nämlich wichtige Hinweise, wie sie zu lösen sind.

Crossposting erzeugt oft Konfusionen. Siehe zu anderen Antworten auch: http://www.mathworks.com/matlabcent.....s/11359-rotate-3d-figures

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Studento

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2015, 03:14     Titel: Lösung von mir
  Antworten mit Zitat      
Hey, das sieht mir ganz nach meiner UNI aus Wink wenn ich in die komme, kann ich dir mein Programm zu kommen lassen. Das wäre Donnerstag... Damit bin ich komplett durch meine Prüfung gekommen.
Wenn du magst kannste mal ne Mail-Adresse nennen.
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.01.2015, 16:13     Titel: Re: Lösung von mir
  Antworten mit Zitat      
Hallo Studento,

Es ist nicht klar, wen Du meinst und um welches Programm es sich handelt.

Gruß, Jan
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.