Oder Text markieren und Enter drücken…

ButtonLab 2.1

Tags
Backlinks
» Tags: "ButtonLab 2.1" is tagged as
» Backlinks: These Wikipages link to "ButtonLab 2.1"

Ein Labor um verschiedene Buttons mit einem Abstandssensor auszuprobieren.

Die Bedienung eines Buttons mithilfe eines Abstand Sensors unterscheidet sich in mehreren Punkten von der gewohnten Maus/Touch Interaktion.
Da es auf diesem Gebiet noch keine Standarts gibt, haben wir ein Button Labor für Abstandssensoren in Processing/Eclipse entwickelt. Hier lassen sich verschiedene Grundlegende Einstellungen untersuchen.
Dabei sind neben mehreren GUI Elementen auch eine Möglichkeit entstanden, wie der Mappingbefehl verändert werden kann um die Transition zwischen den Status genau

einstellen zu können.

Buttons einstellen

Die Kurven bestimmen, wie ein Status in den nächsten morpht. Diese Kurven lassen sich vollständig anpassen.

Wurden vier Status ausgewählt kann man sie im "Button testen" Modus ausprobieren.

Button testen

 

Im Folgenden wird erklärt, wie man solche Bezierkurven Funktionen erstellt.

Durch das verwenden der Bezier Kurve und der bezierpoint funktion kann der mapping befehl verändert werden. Im ButtonLab wurden immer zwei bezier Kurven hintereinander gelegt, um die Kurve genauer einstellen zu können. Das Prinzip sieht folgendermaßen aus.

Bezier mapping

float t = map ( input, inputLow, inputHigh, 0, 1 );
float x = bezierPoint( x1, x2, x3, x4, t );
float y = bezierPoint( y1, y2, y3, y4, t );

valueMap = map( y, y1, y2, targetValueLow, targetValueHigh );

 

 

Wenn man mehrere Bezier Kurven aneinander legt, muss man die gesamte Länge kennen, um gleichmäßig mappen zu können. Mit dieser Funktion kann man die ungefähre Länge einer Bezier Kurve berechnen.

Aus zwei aneinanderliegenden BezierKurven wird der Mittelpunkt berechnet. mX1 - mX2 und mX3 und mX4 sind die Start und Endpunkte der Kurven.

float l1 = getBezierLength(x1, y1, Acnx1, Acny1, Acnx2, Acny2, x2, y2);
float l2 = getBezierLength(x3, y3, Acnx3, Acny3, Acnx4, Acny4, x4, y4);
float l = l1 + l2;
         
         mX1 = map(x1,70,683,40,0 );
         mX4 = map(x4,70,683,40,0 );

         mX2 = map(l1,0,l,mX1,mX4 );
         mX3 = mX2;

 

// Die Länge wird annäherunsweise betimmt.

float getBezierLength(float x1, float y1, float ax1, float ay1, float ax2, float ay2, float x2, float y2) {
        float oldx = x1;
        float oldy = y1;
        float sum = 0;
       

// wird das maximum der for schleife erhöht, wird die Länge genauer berechnet
        for (int i = 1; i<=20; i++) {
            float t = map(i, 0,20, 0,1);
            float nextx = bezierPoint(x1, ax1, ax2, x2, t);
            float nexty = bezierPoint( y1, ay1, ay2, y2, t);
            sum += dist(oldx, oldy, nextx, nexty);
            oldx = nextx;
            oldy = nexty;
        }

        return sum;
       
    }

Eclipse

http://ig.hfg-gmuend.de/Members/antonio_kraemer/ButtonLab2.1.zip/view

http://ig.hfg-gmuend.de/Members/antonio_kraemer/GUIclasses.zip/view

Processing

http://ig.hfg-gmuend.de/Members/antonio_kraemer/mapCostum2.pde/view

http://ig.hfg-gmuend.de/Members/antonio_kraemer/lengthOFbezier.pde/view

 

//

antonio.kraemer@hfg

patric.sterrantino@hfg

marcel.mueller@hfg