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

Apfelmännchen erstellen

 

Mampfgnom

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2010, 16:08     Titel: Apfelmännchen erstellen
  Antworten mit Zitat      
Hallo.

Wie der Titel verrät, will ich gerade ein Apfelmännchen erstellen. Meine erste Frage lautet: wie kann man das grafisch am besten realisieren? Ich bin ein Matlab Frischling und kenne nicht alle Möglichkeiten, auf jedenfall habe ich nicht so was wie ein Canvas gefunden, in dem man zeichnen könnte. Deswegen geht mein Umweg zZ über ein Axes. Hier ist mein bisheriger Code, allerdings verursacht der nur, dass Matlab sich aufhängt^^ Könnt ihr mir bitte sagen, wo mein Fehler liegt, der Matlab aufhängt?

Code:
function varargout = untitled(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @untitled_OpeningFcn, ...
                   'gui_OutputFcn',  @untitled_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

function untitled_OpeningFcn(hObject, eventdata, handles, varargin)
guidata(hObject, handles);
end

function varargout = untitled_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
end


function pushbutton1_Callback(hObject, eventdata, handles)
plot(50,100,'red');
Ticks = 1:50:700;
set(gca, 'YTickMode', 'manual', 'YTick', Ticks, 'ylim', [1,700]);
set(gca, 'XTickMode', 'manual', 'XTick', Ticks, 'Xlim', [1,700]);
X = 1:700; Y = 1:700;
n = 150;

cla;
for i = 1:700
    for j = 1:700
        X(i,j) = i/175-2;
        Y(i,j) = j/175-2;
        punkt(i,j) = iterieren(X(i,j),Y(i,j),n);
        switch punkt(i,j)
            case{0}
                plot(i,j,'black');
            case{1}
                plot(i,j,'red');
            case{2}
                plot(i,j,'blue');    
            case{3}
                plot(i,j,'green');
            case{4}
                plot(i,j,'yellow');
            case{5}
                plot(i,j,'cyan');
            case{6}
                plot(i,j,'magenta');
            case{7}
                plot(i,j,'green');
            case{8}
                plot(i,j,'red');
            case{9}
                plot(i,j,'yellow');
            otherwise
                plot(i,j,'blue');
        end
        Ticks = 1:50:700;
        set(gca, 'YTickMode', 'manual', 'YTick', Ticks, 'ylim', [1,700]);
        set(gca, 'XTickMode', 'manual', 'XTick', Ticks, 'Xlim', [1,700]);
    end
end
end

function wert = iterieren(X,Y,n)
XN = X; X1 = X;
YN = Y; Y1 = Y;
count = 0;
for i = 1:n
    XNplus = XN^2 - YN^2 + X1;
    YNplus = 2 * XN * YN + Y1;
    a = sqrt(XNplus^2 + YNplus^2);
    XN = XNplus;
    YN = YNplus;
    if (a<=2)
        count = count +1;
    else
        wert = count;
        break;
    end
    wert = count;
end    
end


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.11.2010, 23:14     Titel: Re: Apfelmännchen erstellen
  Antworten mit Zitat      
Hallo Mampfgnom,
Zitat:
Hier ist mein bisheriger Code, allerdings verursacht der nur, dass Matlab sich aufhängt

Bitte poste die Fehlermeldung und die betreffende Zeile.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2010, 08:13     Titel:
  Antworten mit Zitat      
Hallo.

Entschuldige bitte, dass ich den Fehler vergessen habe, sollte eigentlich selbstverständlich sein. Also:

Das erhalte ich beim Start der GUI:

??? Reference to non-existent field 'output'.

Error in ==> untitled>untitled_OutputFcn at 25
varargout{1} = handles.output;

Error in ==> gui_mainfcn at 265
feval(gui_State.gui_OutputFcn, gui_hFigure, [], gui_Handles);

Error in ==> untitled at 16
gui_mainfcn(gui_State, varargin{:});

Wenn ich auf danach auf den PushButton in der GUI drücke, hängt er sich scheinbar auf. Ich kann meine GUI zwar noch schließen, aber danach reagiert Matlab auf nichts mehr.
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.11.2010, 12:03     Titel:
  Antworten mit Zitat      
Hallo Mampfgnom,

Woher soll die Variable "handles.output" denn stammen?
Du könntest den Debugger verwenden, um Dir den Struct "handles" anzuschauen, wenn der Fehler auftritt:
Code:


Zitat:
Ich kann meine GUI zwar noch schließen, aber danach reagiert Matlab auf nichts mehr.

Das ist ausgesprochen ungewöhnlich in Matlab. Bringt auch Ctrl-C nichts?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2010, 12:42     Titel:
  Antworten mit Zitat      
Hallo Jan.

Danke, dass du dich meines Problems annimmst. Strg + C hilft und bringt folgende Meldungen:

??? Operation terminated by user during ==> untitled>pushbutton1_Callback at 45

In ==> gui_mainfcn at 96
feval(varargin{:});

In ==> untitled at 16
gui_mainfcn(gui_State, varargin{:});

In ==> guidemfile>@(hObject,eventdata)untitled('pushbutton1_Callback',hObject,eventdata,guidata(hObject))


??? Interrupt while evaluating uicontrol Callback.

Wie ich die Zeile "dbstop if error" einbinden muss weiß ich leider nicht.

Nur noch mal zum Verständniss: Ich habe eine GUI mit GUIDE erstellt. Parallel dazu wird ein M-File erzeugt. In diesen M-File habe ich meinen Code geschrieben. Von daher wundert es mich auch, dass Matlab Probleme mit dem handles.output hat, weil das ein standardmäßig erzeugtes Code Schnipsel ist.
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.11.2010, 12:49     Titel:
  Antworten mit Zitat      
Hallo Mampfgnom,

Code:

Dies wird einfach ins CommandWindow eingetippt.
Du kannst auch einen BreakPoint im Editor in die entsprechende Zeile setzen (kleine rote Punkt links vom Text).
Oder im Editor den Menüpunk öffnen:
Debug->Stop if Error/Warnings->Tab:Erros->RadioButton:Always stop if error
Aber das letztere ändert sich bisweilen zwischen den Matlab-Versionen. Darum bevorzuge ich das einfache "dbstop if error".

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2010, 14:51     Titel:
  Antworten mit Zitat      
Hallo.

Ich habe den dEbugger jetzt bei Fehlern anhalten lassen. Das erste mal hält er bei folgender Zeile an (also ein grüner Pfeil ist zu sehen):

varargout{1} = handles.output;

Wenn ich danach meinen Code mit Strg + C abbreche springt der Debugger weiter und setzt einen neuen grünen Pfeil bei:

case{0}
plot(i,j,'black'); <--

Liegt der Fehler also beim plot?
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.11.2010, 15:46     Titel:
  Antworten mit Zitat      
Hallo Mampfgnom,
Zitat:
Liegt der Fehler also beim plot?

Das kann ich nicht wissen. Aber Dein Debugger weiß es. Lasse Dir doch einfach die Fehlermeldung anzeigen, wenn der Debugger anhält:
Code:

Hast Du Deinen "handles"-Struct angeschaut und festgestellt, wieso das Feld ".output" gesucht, aber nicht gefunden wird? Ich würde erstmal ein Problem lösen, bevore ichdas nächst angehe.

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.