SVG-Toolchen für App-Scenarien

Projekt-Kurzfassung: Es gibt zahlreiche IT-Web-Anwendungsbereiche, die graphische 2D-Elemente benötigen. Bei diesem Projekt geht es um die Entwicklung einer App, die ECMAScript verwendet und das Entwicklen von SVG-Komponenten unterstützt ( statisch und/oder Animationen, localSorage und JSON ).

Die eigene Idee soll in möglichst einfacher, robuster Weise als Projekt realisiert werden ( Plagiate sind out ). Hierbei seien user-zentrierte Anwendungsbezüge und Erwartungen vorrangig.

Ideenfindung App für Erstellung von SVG-Komponenten

Franz Kafka:
"Verbringe nicht die Zeit mit der Suche nach einem Hindernis, vielleicht ist keines da."

Hier werden lediglich Basis-Ideen und Hinweise stichwortartig beschrieben. Die "self-made" soll praxistauglich sein und SVG gestaltend einbeziehen.

Hinweis: Grafik-Grundkenntnisse auffrischen ... Weblinks OpenGL, WebGL, SVG, Canvas

Ein Wissen um die Bedienung von Grafik-Programmen ist für eine erfolgreiche Toolchen-Entwicklung wohl nicht hinreichend, wenn Events bei Grafische Elementen und mauszentrierte Applikationsentwicklungen genötigt werden. Falls erforderlich, können/sollen Grafik-Kenntnissen aufgefrischt werden.

Seit den Anfängen der elektronischen Datenverarbeitung gibt es zahlreiche, kommerzielle, umfangreiche Grafik-Programme, siehe z.B.
de.wikipedia Grafiksoftware.

Hinweis: HTML5 und SVG ( allgemeines ) Weblinks

Hier einige Links zu SVG:

HTML5 ermöglicht die eingebettete Verwendung von SVG-Tags, die als Grafik-Flächen dienen. Auch können externe SVG-Dokumente ähnlich wie Bilder ( object-Tag ) eingebunden werden. Hier ist ein de.wikipedia-Beispiel: SVG-Buch-logo.svg ,

Hinweis: SVG-Transformationen Matrizen

Transformationen sind translate, rotate und scale. Siehe w3.org Koordinaten-Transformationen .

svg-Tag mit width="600" height="150" und viewBox="-100 0 300 150"
 x="10"  y="10"  width="50" height="50" transform="matrix(1 0 0 1   0   0)"
 x="10"  y="10"  width="50" height="50" transform="matrix(1 0 0 1  25  25)"
 x="-25" y="-25" width="50" height="50" transform="matrix(1 0 0 1  85  85)"
 x="85"  y="85"  width="50" height="50" transform="rotate(45 110 110)"

Teste Transformationen ( Bitte auf ein farbiges Quadrat klicken )

Siehe Weblink svg-transformations

Etwas Theorie ...

   i = a·x + c·y + e

   j = b·x + d·y + f

Die Initialisierung entspricht transform="matrix(1 0 0 1 0 0)", d.h. b = c = e = f = 0 und a = d = 1. In der Matrizenschreibweise sieht die Transformation der Userkoordinaten (x,y) in die Gerätekoordinaten (i,j) so aus:

Viewport =   Matric  *  Userspace

⎡ i ⎤   ⎡ a  c  e ⎤ ⎡ x ⎤
⎢   ⎥   ⎢         ⎥ ⎢   ⎥
⎢ j ⎥ = ⎢ b  d  f ⎥·⎢ y ⎥
⎢   ⎥   ⎢         ⎥ ⎢   ⎥
⎣ 1 ⎦   ⎣ 0  0  1 ⎦ ⎣ 1 ⎦

Mit den Transformationskonstanten a, b, c, d, e, f können die Userkoordinaten (x,y) in die Gerätekoordinaten (i,j) umgewandelt werden. Ist a·d != b·c, so kann die Umkehrmatrix berechnet werden:

⎡ 1  0  0 ⎤     ⎡ a  c  e ⎤ ⎡  d  -c  c·f-d·e ⎤
⎢         ⎥     ⎢         ⎥ ⎢                 ⎥
⎢ 0  1  0 ⎥  =  ⎢ b  d  f ⎥·⎢ -b   a  b·e-a·f ⎥·(a·d - b·c)
⎢         ⎥     ⎢         ⎥ ⎢                 ⎥
⎣ 0  0  1 ⎦     ⎣ 0  0  1 ⎦ ⎣  0   0  a·d-b·c ⎦

Bei translate(ti,tj) ist e = tx, f = ty

    [ 1,  0,  ti]
    [ 0,  1,  tj]
    [ 0,  0,  1 ]

Bei rotate(w) entspricht a = cos(w), b = sin(w), b = -sin(w), d = cos(w), e = 0, f = 0.

    [ co,  sn,  0]  mit co = cos(w); sn = sin(w);
    [-sn,  co,  0]
    [  0,   0,  1]

Bei scale(sx,sy) entspricht a = sx, b= 0, c = 0, d = sy, e = 0, f = 0.

    [sx,  0,  0]
    [ 0, sy,  0]
    [ 0,  0,  1]

Die Reihenfolge der Transformationen ist wesentlich. Beispiel:

rot(a)       := matrix(cos(a), sin(a), -sin(a), cos(a), 0, 0)

scale(sx,sy) := matrix(    sx,      0,       0,     sy, 0, 0)

rot(a) * scale(sx,sy) = matrix(sx*cos(a), sx*sin(a), 
                              -sy*sin(a), sy*cos(a), 0, 0)

scale(sx,sy) * rot(a) = matrix(sx*cos(a), sy*sin(a), 
                              -sx*sin(a), sy*cos(a), 0, 0)

Bei Rotationen um einen Punkt ( i0, j0 ) ist eine Verschiebung ( -e, -f ) zum Nullunkt, dann eine Rotation um den Nullpunkt und dann eine Verschiebung um ( e, f ) erforderlich.

⎡ a1  c1  a1·e+c1·f - e ⎤   ⎡ 1  0  -e ⎤ ⎡ a1  c1  0 ⎤ ⎡ 1  0  e ⎤
⎢                       ⎥   ⎢          ⎥ ⎢           ⎥ ⎢         ⎥
⎢ b1  d1  b1·e+d1·f - f ⎥ = ⎢ 0  1  -f ⎥·⎢ b1  d1  0 ⎥·⎢ 0  1  f ⎥
⎢                       ⎥   ⎢          ⎥ ⎢           ⎥ ⎢         ⎥
⎣  0   0       1        ⎦   ⎣ 0  0   1 ⎦ ⎣  0   0  1 ⎦ ⎣ 0  0  1 ⎦

Somit
e_neu = a1·i0 + c1·j0 - i0 und
f_neu = b1·i0 + d1·j0 - j0 

Plagiate sind out!
Viel Freude bei der Ausarbeitung!
Letzter Abgabetermine So 12.00 Uhr