Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 14-05-2003, 19:12   #1 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
||mausgesten v0.1

nabend,

punkt1: ursprung der idee:
MausNavigation
unser lieber bloba


punkt2: wir hatten viele ansätze mich hat keiner wirklich weiter gebracht,
also gesucht und man findet nur diese eine seite, zumindest google:
http://www.informatik.htw-dresden.de...tion/beleg.htm

da steht nich viel zum eigentlichen thema
soviel konnte ich rauslesen:

geste in punkte fassen
punkte reduzieren
winkel aufstellen
verteilung berechnen

und irgendwo ausm text konnte man noch herauslesen, anhand der verteilung kann man ein objekt identifizieren.


also ab an die arbeit, raus kam dies:

schauen saugen


is noch a bisserl buggy, hab aber au "nur" 3h dran verbracht,
was ich leider noch nicht eingebaut hab is die abfrage nach komplexeren strukturen,
zB ein "L", die wahrscheinlichkeiten sind mir bekannt, aber ich bin momentan irgendwie zu dusselig
um ne abfrage dafür zu machen, es sind 2 statt 1 wert(e) abzufragen.

hier ein paar codeschnipsel,leider noch sehr unsauber und größtenteils unkommentiert
ich hoffe ich kann bald ne saubere version posten

ActionScript:
  1. //hier werden die punkte gemalt und gleichzeitg alle daten in ein array
  2. //aufgenommen
  3.  
  4. Movieclip.prototype.createDot=function(x,y,n,c,ind){
  5.     if(typeof _global.dots =="undefined") _global.dots=[[],[{}],[]]
  6.     p=createEmptyMovieClip("dot"+ind,ind)
  7.     p.linestyle(n,c)
  8.     p.moveTo(x,y)
  9.     p.lineTo(x+1,y)
  10.     dots[0].push({x:x,y:y,pfad:p,prevabstand:undefined})
  11.     dots[1].anzahl++
  12.     if(dots[0].length>1){
  13.         var currentNum=dots[0].length-1
  14.         var prevNum=currentNum-2
  15.         x2=dots[0][currentNum].x
  16.         x1=dots[0][prevNum].x
  17.         y1=dots[0][prevNum].y
  18.         y2=dots[0][currentNum].y
  19.         var dx=x1-x2
  20.         var dy=y1-y2
  21.         dots[0][prevNum].abstand=distance(dx,dy)
  22.         dots[0][prevNum].winkel=calcwinkel(x1,y1,x2,y2)
  23.     }
  24. }
  25.  
  26.  
  27. //punkte reduzieren, n = wieviele sollen übrig bleiben
  28. Movieclip.prototype.killPoints=function(n){
  29.     zabst=0
  30.     while(dots[1].anzahl>n){
  31.         for(var i=0; i<dots[0].length;i++){
  32.             //zabst, hochzählen um möglichst viele miniabstände rauszufioltern
  33.             if(dots[0][i].abstand<zabst && dots[1].anzahl>n){
  34.                 p=dots[0][i].pfad
  35.                 dots[1].anzahl--
  36.                 dots[0].splice(i,1)
  37.                 p.removeMovieClip()
  38.             }
  39.         }
  40.         recalc()
  41.         zabst+=0.1
  42.     }
  43. }
  44.  
  45. //winkel berechnen zw 2 punkten
  46. Movieclip.prototype.calcwinkel=function(x1,y1,x2,y2){
  47.     return Math.round(Math.atan2(y2-y1,x2-x1)*180/Math.PI-90)
  48. }
  49. //so sehen die definition von objekten aus
  50. //in [0] der text in [1] ein 0bjekt, welches den notwendigen winkel enthält, und dessen wahrscheinlichkeit
  51. geradel=["Gerade von Links",[{winkel:90,wahrschein:30}]]
  52. gerader=["Gerade von Rechts",[{winkel:-90,wahrschein:30}]]
  53. geradeo=["Gerade von Oben",[{winkel:-180,wahrschein:30}]]
  54. geradeu=["Gerade von Unten",[{winkel:0,wahrschein:30}]]
  55. objL=[["Objekt L"],[{winkel:-180,wahrschein:30},{winkel:90,wahrschein:12}]]
  56. formen=[geradel,gerader,geradeo,geradeu,objL]



das feine daran, wenn es erstmal tadellos funktioniert,
kann man das system wie auf der website beschrieben auch trainieren, es geht nämlich nur um die wahrscheinlichkeiten

einen kreis habe ich noch nicht eingebaut, da ich dort ca 10 werte abfragen muss, eine folge von winkeln, die alle eine gleiche verteilung haben sollten
aber da ich nichmal 2 abfragen schaff :D
trotzdem ist ein kreis kein problem, denn es kommen(in einem gewissen toelranzbereich) für verschiedene winkel gleiche verteilungen vor...eine andere geschichte;)


grüße
deluxe

Geändert von Deluxe (14-05-2003 um 23:23 Uhr)
Deluxe ist offline   Mit Zitat antworten
Alt 14-05-2003, 19:18   #2 (permalink)
Sven Carlsen
 
Registriert seit: Sep 2002
Ort: NRW
Beiträge: 466
na für 3 stunden ist das doch schon sehr schick.
werde mal testen.
twoke ist offline   Mit Zitat antworten
Alt 14-05-2003, 21:57   #3 (permalink)
anyway
Gast
 
Beiträge: n/a
fein.

Habe sowas ähnliches schonmal für den Duktus einer Handschrift machen wollen - also das der Strich sich bei schnelleren Mausbewegungen auch stufenlos verengt. Dabei bin ich allerdings auch an den Abfragen gescheitert.
Werde mal in ein paar Monaten einen neuen Angriff starten..

anyway.
  Mit Zitat antworten
Alt 14-05-2003, 22:11   #4 (permalink)
fette sau
 
Benutzerbild von pmobile
 
Registriert seit: Aug 2002
Ort: Kaufbeuren /Allgäu
Beiträge: 376
wow!!


Macromedia Flash Player 6 wird durch ein Script in diesem Film verlangsamt. Wenn das Script weiterhin ausgeführt wird, reagiert der Computer möglicherweise nicht mehr. Möchten Sie die Ausführung des Scripts abbrechen?

--- Ja --- / --- Nein ---
__________________
Gruß Bastian
please help:
grad nichts
pmobile ist offline   Mit Zitat antworten
Alt 14-05-2003, 23:02   #5 (permalink)
anyway
Gast
 
Beiträge: n/a
Mit dieser Zeile funzt das Script auch nicht besonders gut:

dots[0].push({x:x,y:y,pfad<img src="images/smilies/tongue.gif" border="0" alt="">,prevabstand:undefined})

muß wohl:

dots[0].push({x:x,y:y,pfad : p, prevabstand:undefined})

heißen...(Nur ohne Leerzeilen an der Stelle 'pfad : p')

anyway.
  Mit Zitat antworten
Alt 15-05-2003, 18:41   #6 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
schön ist, dass es funktioniert, schlecht ist, wielange es dauert!!!

kaum zu gebrauchen, bei dem "speed"
Janoscharlipp ist offline   Mit Zitat antworten
Alt 15-05-2003, 18:56   #7 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
yau klar geb ich euch recht
is halt noch kein meter optimiert
beim auswerten laufen ca 10++ for-schleifen ab
teiwleise gehen die mehr als 40 elemente durch
und das is eben heftig.

dazu kommt noch der kompromiss zwischen erkennung und performance(wie so oft)
je mehr punkte desto genauere wahrscheinlichkeiten
aber umso länger ziehen sich die berechnungen hin.

in der nächsten zeit versuch ich mal den code zu optimieren
und ne bessere version zu posten

bis 0.2
deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 15-05-2003, 20:09   #8 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
ich arbeite grad auch an sonem Ding, allerdings mit ner vollkommen anderen Methode. Hätte vielleicht auch mal in google spickeln sollen...aber das ist doch feige
Janoscharlipp ist offline   Mit Zitat antworten
Alt 16-05-2003, 00:07   #9 (permalink)
LastActionScriptHero
 
Benutzerbild von k7c4
 
Registriert seit: Apr 2002
Beiträge: 572
Ich habe mir den Code aus Zeitgründen nicht genauer anschauen können. aber ich denke, dass man vielleicht Zeit bi der Erkennung gewinnen könnte, wenn man schon während der Bewegung die Wahrscheinlichkeiten berechnet, welche Geste das sein könnte.

Hat man am Anfang nämlich noch wenig Punkte, so hat man auch noch viele Möglichkeiten der Interpretation, die aber mit der Steigenden Punktanzahl weiter sinkt.

Die Schleifendurchläufe für die Anzahl der Messpunkte werden also mehr, während die Schleifendurchläufe für die Erkennungswahrscheinlichkeiten geringer in der Zahl werden.
__________________
All your AS are belong to us! haha!
Beweise heute Deine Tierliebe: Schlage nie ein totes Pferd!
k7c4 ist offline   Mit Zitat antworten
Alt 18-05-2003, 20:33   #10 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
aaaaaahhhhhhhhhhhhh

ich bin knapp vorm Verzweifeln!
Eigentlich wollte ich das mit ner Make bauen, die ich dann über das gemalte lege, aber andererseits, sollte soviel wie möglich WÄHREND dem malen berechnet werden.
Nur wie kann ich eine Maske über etwas legen, und scalieren, dessen Länge und Breite ich noch garnicht kenne???
Janoscharlipp ist offline   Mit Zitat antworten
Alt 18-05-2003, 21:44   #11 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
puuhhh, jetzt hab ich mich mal auf Winkel besonnen, weil sich die ja nicht mit der Größe ändern sollten ...
ziemlich komplexe Struktur taucht da auf, hier ein kleiner Fitzel, auf den ich doch ein bissel stolz bin, denn er funktioniert!

ActionScript:
  1. if(Math.abs(Math.atan2(ny-oy, nx-ox)-this.g[this.possibleG[a]].way[this.g[this.possibleG[a]].dot].a)<0.2){
Janoscharlipp ist offline   Mit Zitat antworten
Alt 18-05-2003, 21:59   #12 (permalink)
Achim Math.PI
 
Benutzerbild von bloba
 
Registriert seit: Jul 2001
Ort: cool Colonia
Beiträge: 11.642
hehe er konnts ned lassen ...*gg*
geiles teil !! nur er frisst arg die performance...
__________________
gruß bloba

2 x onkel² b_d
bloba ist offline   Mit Zitat antworten
Alt 19-05-2003, 11:28   #13 (permalink)
nur noch selten hier
 
Registriert seit: Jun 2001
Ort: Zürich
Beiträge: 177
hallo alle
zum thema mausgesten-erkennung hab ich vor einiger zeit mal was unter f5 gebastelt (http://www.d-art.ch/old/old.html --> Nr. 20). ein etwas anderer ansatz, dafür mehr oder weniger funktionsfähig.



gruss
dave
__________________
www.d-art.ch
dave ist offline   Mit Zitat antworten
Alt 19-05-2003, 11:47   #14 (permalink)
Achim Math.PI
 
Benutzerbild von bloba
 
Registriert seit: Jul 2001
Ort: cool Colonia
Beiträge: 11.642
Thumbs up

jo habs mir mal angesachaut ist echt n cooler anszatz hatte es am abnfang auch überlegt mit nem raster zu machen ader des is echt cool
__________________
gruß bloba

2 x onkel² b_d
bloba ist offline   Mit Zitat antworten
Alt 20-05-2003, 19:06   #15 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
so, nun ist meine super-duper-speed-optimized-fucking-slow-alpha-beta 0.000001 fertig

ich hab keinen bock so ne coole Testumgebung zu bauen, die Ausgabe erfolgt bisher nur mit trace

deshalb hab ich einfach nur das fla angehängt.

mögliche Gesten sind:

linie von oben nach unten
linie von unten nach oben
linie von links oben nach rechts unten
...
kreis im Uhrzeigersinn
Kreis gegen den Uhrzeigersinn
..
ein "L"
ein "z"


neue Gesten lassen sich sehr leicht erstellen, einfach mal die Struktur ab ca. Zeile 10 ansehen.
Angehängte Dateien
Dateityp: zip mousegestures.zip (3,0 KB, 56x aufgerufen)
Janoscharlipp ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 15:33 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele