2D-Welt-Koordinanten mit Canvas Abbildung von (x,y) auf (i,j)

Motivation Wie soll ich Was machen?

Simulationen ( mathematische Berechnungen, Statistik, Festigkeitslehre, Statik, CAD, usw. ) liefern vielfach zahlreiche Werte und Abhängigkeiten, die einer übersichtlicheren Visualisierung bedürfen. Beispiele: Statistik-Visualisierung, technischen Diagrammen, Balkendiagramme, Tortendiagramme, schiefer Wurf, Simulation der Gartengestaltung, usw.

Es ist mind. eine Bibliothek zu schreiben, die ( möglichst univeresll, erweiterbar ) Simulationen in der realen 2D-Welt und deren grafischen Darstellungen unterstützt. Zu Simulationen gehören i.a. ( sehr ) viele Parametern. Die Simulation, insbesondere auch die Parametern-Übergabe und Initialisierungen sollen auch durch ungschultes Personal möglich sein. Beispiel: Wie kann auf einfache Weise die Eingabe von Mathe-Funktionen und die grafische Darstellung von Funktionen erfolgen?

Welt-Viewport-Abbildung ( isotrop / anisotrop ) (x,y) --> (i,j)

Zu den 2D-Weltkoordinaten (x,y) gehören die Bereiche xMin <= x <=; xMax und yMin <= y <= yMax Reine grafische Transformationen ( Matrizen ) scheiden aus, weil in der 2D-Welt i.a. Berechnungen, wie z.B. tatsächliche Polygon-Fläche, erforderlich sind.

    y-Achse
     | 
yMax | . . . . . . . . . . . . . . . . . 
     |                                 .
     |                                 .
     |      yMin <= y <= yMax          . 
     |                                 .
     |      xMin <= x <= xMax          .
     |                                 .
     |                                 .
yMin |---------------------------------|---  x-Achse 
   xMin                             xMax

Beispiel: Zu y = sin(x) gehört

    *xMin_yMin_xMax_yMax: -10 10 -2 2 anisotop

Eine Welt-Viewport-Abbildung macht aus (x, y) ein (i, j). Zu einer Welt gehört "isotrop" bzw. "anisotrop".

    *iMin_jMin_iMax_jMax: 0 0 600 400 

Zu den 2D-Gerätekoordinaten (i, j) gehören die Bereiche iMin <= i <= iMax und jMin <= j <= jMax

      iMin=0                    iMax = cxt.canvas.width;
jMin=0 |-------------------------|------- i-Achse 
       |    jMin <= j <= jMax    .
       |                         .
       |    iMin <= i <= iMax    .
       |                         .
  jMax |  . . . . . . . . . . .. .  jMax = cxt.canvas.height;
       |                             
       |                             
      j-Achse

Ist el das Canvas-Tag-Element, so kann die Canvas-Breite/Höhe mit el.width, el.height oder mit cxt.canvas.width, cxt.canvas.height gelesen/gesetzt werden. Die äußere Canvas-Positionierung kann mit CSS erfolgen.

Zur Laufzeit: Eingabe-String wird zur nativ-Funktion Wie?

Beim Programmieren werden typischer Weise die Funktionsquelltexte übersetzt / gelinkt. Bei praktischen Aufgaben kann ein "Laufzeitparser" nützlich sein. Soll z.B. ein Zeichenprogramm den Graph von Funktionen zeichen, die der Benutzer sich ausdenkt, so soll aus der mathematisch geschriebenen Text ( "Funktionseingabe" ) eine nativ Funktion werden, die dann für die grafisch Darstellung verwendet wird.

// Beispiel für lediglich ein Argument t:
var fn_str = "function (t) { return Math.sin(t); }";
var fn_func = new Function("t", fn_str);

Zu einer mathematischen Funktion gehören i.a. "anisotrope" Intervalle, wie z.B.

Beispiel: Zu  y = sin(x) gehört  

  *xMin_yMin_xMax_yMax: -10 10 -2 2 anisotop

Eine Welt-Viewport-Abbildung macht aus (x,y) ein (i,j).
Zu einer Welt gehört "isotrop" bzw. "anisotrop".

  *iMin_jMin_iMax_jMax: 0 0 600 400 

Prinzip der Umrechnung von (x,y) nach (i,j):

  i = iMin + (iMax-iMin)/(xMax-xMin)*(x-xMin);
  j = jMin + (jMax-jMin)/(yMax-yMin)*(y-yMin);

  entsprechend 
  
  x =  ( ... berechnet mit i )
  y =  ( ... berechnet mit j )

Siehe z.B. Mathematische Funktionen .

Einführende Lehrbeispiele Ein Anfang ( Demo )

Hier sind einfache, unfertige, fehlerhaftes, einführende Beispiele, die fuer die eigene Lösung hilfreich sein können. Siehe z.B. Flächenberechnung ( geschlossener Polygonzug ) und Canvas-Lehrbeispiele und Splines ( Einfuehrung ).

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