Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Geschwindigkeitsproblem

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Sarevok



Anmeldungsdatum: 23.03.2011
Beiträge: 2

BeitragVerfasst am: 23.03.2011, 17:43    Titel: Geschwindigkeitsproblem Antworten mit Zitat

Hallo

Ich bin ein absoluter Neuling im Bereich Freebasic und habe, obgleich ich mich mit Hardware und Assembler, sowie SQL und HTML gut auskenne, bisher noch nicht mit einer "richtigen" Programmiersprache gearbeitet.

Bei meinen ersten Gehversuchen in diesem Bereich hatte ich bisher keine Schwierigkeiten und habe dann aus Interesse einmal folgendes kurzes Programm geschrieben:


screen 20,32
dim x as integer
dim y as integer
do
getmouse x,y
pset (x,y)
loop
end

Dieses Programm fragt die Mausposition ab und setzt dann dort einen Punkt.
Allerdings wird daraus bei schnellen Mausbewegungen keine Linie sondern nur einzelne Punkte.
Ich würde gerne wissen woran das liegt denn mein PC müsste auf jeden Fall schnell genug sein um da eine durchgehende Linie zeichnen zu können zwinkern
Liegt es an schlechten Algorithmen des Compilers oder wo sonst ist das Problem?
Über Hilfe würde Ich mich sehr freuen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
XOR



Anmeldungsdatum: 23.07.2010
Beiträge: 161

BeitragVerfasst am: 23.03.2011, 19:23    Titel: Antworten mit Zitat

Das ist immer so mit der Maus.
Mache es So:
Code:
screen 20,32
dim as integer x, y, xAlt, yAlt
do
 xAlt = x
 yAlt = y
 getmouse x,y
 line(x,y)-(xAlt,yAlt)
loop until multikey(1) 'Mit ESC abbrechen
end

nicht getestet, sollte aber gehen, hier wird eine linie zwischen altem und der neuen Mausposition gezeichnet, so das keine luecken entstehen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 23.03.2011, 19:32    Titel: Antworten mit Zitat

Hallo,

hier noch ein ausführlicherer Vorschlag:
Code:
dim as integer x1=-1, x2, y1, y2
screen 20,32
Print "Maus bewegen und dann beliebige Taste zum Beenden druecken."
setmouse (511,383)  'Startposition der Maus setzen
do
    getmouse x2, y2
    if (x2 >= 0) AndAlso (y2 >= 0) AndAlso ((x2 <> x1) OrElse (y2 <> y1)) then
        '-> Es handelt sich um ein gueltiges Koordinatenpaar (=Maus im Fenster),
        '   da x2 >= 0 und y2 >= 0
        '-> Die Mausposition hat sich seit dem letzten GETMOUSE veraendert, d.h.
        '   wir muessen etwas zeichnen, da (x1,y1) <> (x2,y2)
        '-> Hinweis:  "ANDALSO" ist && in C, waehrend "AND" einem & entspricht.
        if (x1 >= 0) then  'Gibt es eine vorherige Koordinate oder ist es die erste?
            line (x1, y1)-(x2, y2)  'Es gibt eine vorherige -> Linie zeichnen
        else
            pset (x2, y2)  'Keine vorherige -> nur einen Punkt zeichnen
        end if
        x1 = x2
        y1 = y2
    end if
    sleep 1  'CPU-Auslastung reduzieren
loop until inkey <> ""  'Ausfuehren bis Tastendruck erfolgt
end


Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sarevok



Anmeldungsdatum: 23.03.2011
Beiträge: 2

BeitragVerfasst am: 23.03.2011, 19:34    Titel: Antworten mit Zitat

Es funktioniert, vielen Dank für Eure schnelle Hilfe.

Heißt das es liegt an dem Befehl getmouse weswegen es sonst nicht funktioniert?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1210

BeitragVerfasst am: 23.03.2011, 19:50    Titel: Antworten mit Zitat

sebastian, soweit ich weiß, ist AND statt ANDALSO (und analog OR statt ORELSE) bei vergleichen schneller.
jedes ANDALSO führt nen vergleich und nen sprung aus; ORELSE genauso.
das macht dann, genau dann und nur dann sinn, wenn du meinst:
Code:

if bedingung1 ANDALSO zeitraubende_funktion1() then

RND ist genau an der schwelle zwischen zeitraubend und nicht zeitraubend, das macht keinen riesigen unterschied.
bei vergleichen ist AND aber besser. weil nur EIN vergleich, und viele (schnelle!) logische operationen ausgeführt werden

IMHO und IIRC zwinkern
_________________
MFG
Flo

Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.

zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 23.03.2011, 20:04    Titel: Antworten mit Zitat

Flo hat Folgendes geschrieben:
sebastian, soweit ich weiß, ist AND statt ANDALSO (und analog OR statt ORELSE) bei vergleichen schneller.
Also bei sowas würde ich doch lieber den Optimierer arbeiten lassen (ok, geht in FB nicht, aber ganz allgemein). Es ist schon wesentlich nachvollziehbarer, wenn man AndAlso hinschreibt. Zudem bin ich mir sicher, dass x86 da irgendwelchen kranken Opcodes hat, die AndAlso genau so schnell machen (Vergleich + Sprung in einem Befehl oder so irgendwas in der Art müsste ja klappen)
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1210

BeitragVerfasst am: 23.03.2011, 20:50    Titel: Antworten mit Zitat

echt, andalso ist lesbarer als ein reines "and"?
ich finde, das macht keinen allzugroßen unterschied; ist wohl geschmackssache (wobei ich auch && anschaulich finde zwinkern )

soweit ich weiß, ist das ARM, aber nicht x86, das die "vergleiche-und-springe"-befehle in einem befehl hat

generell habe ich aber mal einen test gemacht, bei dem rausgekommen ist, dass gerade bei "normalen" vergleichen (also keinen funktionsaufrufen) AND signifikant (2x bis 3x) schneller ist als ANDALSO; allerdings bei fb0.17
_________________
MFG
Flo

Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.

zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 23.03.2011, 20:56    Titel: Antworten mit Zitat

Flo hat Folgendes geschrieben:
echt, andalso ist lesbarer als ein reines "and"?
ich finde, das macht keinen allzugroßen unterschied; ist wohl geschmackssache (wobei ich auch && anschaulich finde zwinkern )

Das war jetzt nicht auf die tasächliche Lesbarkeit des Codes bezogen (da bevorzuge ich eh && Zunge rausstrecken), sondern auf die semantische Nachvollziehbarkeit. And ist halt eigentlich eine Bitweise kombination.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht 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.

 Impressum :: Datenschutz