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

Schnellere Alternative zu rectangle()

 

Hiwi-Job
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 28.09.2011, 22:23     Titel: Schnellere Alternative zu rectangle()
  Antworten mit Zitat      
Hallo Forengemeinde,

ich bin neu hier im Forum und hoffe, dass ich die richtige Kategorie getroffen habe.

Meine erste Frage: Gibt es eine schnellere Alternative zu der cectangle()-Funktion? Ich habe viele gleich große Kästchen immer und immer wieder zu zeichnen und verbrauche bisher zu viel Zeit in dieser Funktion.

Ich bin für jede Idee und Hilfe dankbar!

Grüße
Ingo
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: 29.09.2011, 00:24     Titel: Re: Schnellere Alternative zu rectangle()
  Antworten mit Zitat      
Hallo Hiwi-Job,

PATCH und SURFACE sind bestimmt schneller, da sie gleich eine große Anzahl von Flächen auf einmal zeichnen können.

In vielen Fällen kann man sich das wiederholte Zeichnen sparen und nur die Koordinaten bestehender Objekte ändern. Wenn Du Deinen Code postest, könnte man das prüfen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiwi-Job
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 29.09.2011, 22:04     Titel:
  Antworten mit Zitat      
Hallo Jan,

vielen Dank für deine Hilfe. Ich werde die genannten Funktionen morgen einmal ausprobieren. Der relevante Code sieht zur Zeit übrigens so aus:

Code:

if (hvar < 200)            %wenn Hilfsvariable < 200, Hilfsvariable 200 setzen
    hvar = 200;
end
for i = 2:2000
    if (graph_anim)
        pause(0.0001)
        figure(99)
        cla
        %axis equal
        grid on  
        axis([-100 hvar -(hvar/10) (hvar/10)])
    end
....

        if  (  (graph_anim) &&  ("wechselnder x-Wert" < hvar) && ("wechselnder x-Wert" > -100) )
            colors = {'b' 'k' 'c' 'm'};
            iColor = 1;
            rectangle('Position',["wechselnder x-Wert"-4,3,4,2],'FaceColor',colors{iColor})
            if iColor < length(colors)
                iColor = iColor + 1;
            else
                iColor = 1;
            end
        end

....

end
 



Grüße,
Ingo
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiwi-Job
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 04.10.2011, 17:48     Titel:
  Antworten mit Zitat      
Hallo!

Leider schaffe ich es weder mit patch() noch mit surface() mehrere Flächen auf einmal zu zeichnen. Bei patch() bekomme ich nur eine große Gesamtfläche aus allen Punkten.

Kann mir da jemand vllt. noch mal einen Tipp zu geben?

Bei surface() habe ich bisher leider noch gar keine Fläche zeichnen lassen können?!? Auch hier bin ich für jede Hilfe dankbar!

Grüße
Ingo
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: 05.10.2011, 10:23     Titel:
  Antworten mit Zitat      
Hallo Hiwi-Job,

Das Antworten würde leichter fallen, wenn Du den benutzten Source-Code postest. Das Beispiel-Programm, das Du oben gezeigt hast, kann ich nicht laufen lassen, weil die Definition einiger Variablen fehlt und die Ausdrücke in Anführungszeichen natürlich nicht bearbeitet werden können.

Was genau Du bei "patch()" und "surface()" falsch angegeben hast, kann ich nicht erraten. Bitte poste die Befehle genauso, wie du sie benutzt. Dann wird wohl auch das Problem klarer.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiwi-Job
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 05.10.2011, 17:52     Titel:
  Antworten mit Zitat      
Hallo Jan,

vielen Dank für deine Hilfe bis hier hin. Die Funktion patch() habe ich jetzt, dank weiterer Hilfe im Forum, zum Laufen bekommen.

Jetzt fehlt mir noch die Funktion surface().
Gibt es für diese Funktion ein einfaches Beispiel an dem ich die Grundfunktion verstehen kann?

Den kompletten Code kann ich hier leider nicht posten, im anderen Thema reichte folgendes, vielleicht wird dadurch klarer wo mein Fehler liegt (diesen Code würde ich gerne in die Funktion surface() "übersetzen").
Code:

...
x=zeros(4,Ende);
y=zeros(4,Ende);
for j=1:Ende
...
x(:,j)=[xpos1,xpos2,xpos3,xpos1];
y(:,j)=[ypos1,ypos2,ypos3,ypos1];
...
end
...
patch(x,y,'k');
...



Grüße
Ingo
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: 05.10.2011, 21:56     Titel:
  Antworten mit Zitat      
Hallo Hiwi-Job,

Der Source von SPHERE ist ein gutes Beispiel für den SURF Befehl. SURFACE ist ein High-Level-Wrapper für den SURF-Befehl, so wie PLOT ein Wrapper für den LINE-Befehl ist.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiwi-Job
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 10.10.2011, 18:08     Titel:
  Antworten mit Zitat      
Hallo!

Ich komme einfach nicht weiter.... Shocked

Mein Code sieht so aus:
Code:
clear all;
% Koordinaten festlegen
x = [1 2; 2 1];
y = [5 5; 7 7];
z = [1 1; 1 1];

% Fläche konstruieren
surface(x,y,z);


und ich wollte eigentlich eine Fläche mit den vier Eckpunkten A(1/5), B(2/5), C(2/7) und D(1/7) erzeugen.

Kann man jemand mit der Säge vorbeikommen und das Holz vor meinem Kopf zersägen?

Grüße
Ingo
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: 10.10.2011, 19:40     Titel:
  Antworten mit Zitat      
Hallo Hiwi-Job,

Was hast Du denn? Ist doch hübsch... ;-)
Es liegen einfach ein paar Ecken überkreutz. So klappt es:
Code:
surface([1 2; 1 2], [5 5; 7 7], [1 1; 1 1])

Nebenbei: Das "clear all" ist hier (wie in den allermeisten anderen Fällen) völlig zweckfrei, macht das Programm aber massiv langsamer. Es löscht alle geladenen Funktionen aus dem Speicher, so dass sie beim nächsten Aufruf wieder mühsam von der Platte gelesen werden müssen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiwi-Job
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 10.10.2011, 21:09     Titel:
  Antworten mit Zitat      
Viele Dank, Jan.

Mit welchem Befehl, an Stelle von "clear all", kann ich denn ein Neuzeichnen erzwingen?

Grüße
Ingo
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: 10.10.2011, 23:47     Titel:
  Antworten mit Zitat      
Hallo Hiwi-Job,

Was ist "Neuzeichnen" und weshalb wird es durch "clear all" erzwungen?
Meinst Du DRAWNOW? Oder CLA, order CLF?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiwi-Job
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 12.10.2011, 17:22     Titel:
  Antworten mit Zitat      
Hallo Jan,

ich meinte "cla", danke!

Grüße,
Ingo
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.