matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenMatlabKörper drehen
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Informatik • Physik • Technik • Biologie • Chemie
Forum "Matlab" - Körper drehen
Körper drehen < Matlab < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Körper drehen: 3D Körper drehen
Status: (Frage) reagiert/warte auf Reaktion Status 
Datum: 23:54 Mo 11.07.2011
Autor: ElLarso

Aufgabe
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:

Ich habe diese Frage auch in folgenden Foren auf anderen Internetseiten gestellt:
[http://www.gomatlab.de/koerper-drehen-t18951.html]
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, 'Selection​ChangeFcn', @sel_body);

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

switch rb_Koerper
case [mm] 'rb_q' [/mm]
    b = Quader(5,5,8);
case [mm] 'rb_p' [/mm]
    b = Pyramide(5,5,8);
case [mm] 'rb_d' [/mm]
    b = Dreieck(5,5,8);
case [mm] 'rb_t' [/mm]
    b = Tetraeder(5,5,8);
case [mm] 'rb_o' [/mm]
    b = Octaeder(5,5,8);
case [mm] 'rb_i' [/mm]
    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, 'Selection​ChangeFcn', @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 [mm] rb_q_CreateFcn(hObject, [/mm] eventdata, handles)
% hObject    handle to [mm] rb_q [/mm] (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 [mm] rb_t_CreateFcn(hObject, [/mm] eventdata, handles)
% hObject    handle to [mm] rb_t [/mm] (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');

        
Bezug
Körper drehen: welche Probleme ?
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 14:53 Di 12.07.2011
Autor: Al-Chwarizmi


> 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:

.....


Hallo EILarso,

ich hoffe, dass du dich nicht allzusehr darüber wunderst,
dass du bisher keine Antwort erhalten hast.

Du stellst hier zwar ein umfangreiches Programm rein und
berichtest von gewissen Problemen. Worin genau deine
Probleme aber bestehen, sagst du überhaupt nicht ...

Unter diesen Umständen hatte also bisher niemand Lust,
sich damit zu beschäftigen (und sich also zuerst einmal
auf die Suche nach deinen Problemen zu begeben).

LG   Al-Chw.



Bezug
                
Bezug
Körper drehen: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 19:11 Di 12.07.2011
Autor: ElLarso

Vielen Dank für die schnelle Antwort.

Mein konkretes Problem besteht darin, dass ich leider keine wirkliche Idee habe, wie man die eingelesenen Körper drehen kann, bzw. wie die Funktionen aussehen müssten und gleiches gilt auch für die Skalierung.

Vielleicht kann mir ja jemand einen Befehl nennen und die Logik, sodass ich nun auch die letzten Programmteile beenden kann.

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.matheraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]