Juli 17, 2023

Animate this

Simple Js Animation

Weiterlesen
Mai 3, 2021

Bruchailromantik

Bruchrechnen in JavaScript

Weiterlesen
April 14, 2021

Mal schnell ein paar Zahlen

Mathehausaufgaben aus dem Zufallsgenerator

Weiterlesen
April 11, 2021

Ist das Kunst oder kann das weg?

Shadertoy - shading online

Weiterlesen
Cover Image

Animate this

Simple Js Animation

Juli 17, 2023 - Lesezeit: ~1 Minute

Wenn man mal schnell eine Idee ausprobieren will ist js immernoch am besten dafür geeignet. Hier mal schnell eine kleine Idee für einen lustigen Zeitvertreib. Einfach mit der Maus klicken und sich überraschen lassen:

Animation

Die ganzen Animationen sind mit ein wenig Mathe und einer grundsätzlichen Engine einfach implementiert.


Cover Image

Bruchailromantik

Bruchrechnen in JavaScript

Mai 3, 2021 - Lesezeit: 41 Minuten

So, hier jetzt also ein JavaScript für Bruchrechenaufgaben. Das ist diesmal etwas größer, um der Anzeige von Bruchzahlen auch gerecht zu werden und nicht irgendeine komische Schreibweise verwenden zu müssen.

//(
var myCalcer = (NumberToUsetargetElement=> {
  // the brain -> calcing stuff
  function Fraction(zahl) {
    let numerator = 0;
    let denominator = 0;
    for (i = 1truei *= 10) {
      if ((zahl * i) == Math.floor(zahl * i)) {
        numerator = (zahl * i);
        denominator = i;
        break;
      }
    }
    return ([numeratordenominator]);
  }

  function calc_ggt(ab) {
    let h = (a > b) ? b : a;
    for (i = hi > 1i--) {
      if ((a % i) == 0 && (b % i) == 0) {
        return i;
      }
    }
    return 1;
  }
  // the eye -> formatting output
  function writeFraction(zaehlernenner) {
    let outSpan = document.createElement("SPAN");
    outSpan.setAttribute('class''frac');
    outSpan.setAttribute('style''padding-right:5px;');
    outSpan.innerHTML = `<sup>${zaehler}</sup><span>/</span><sub>${nenner}</sub>`;
    targetElement.appendChild(outSpan);
  }

  function writeOperatorOrLine(opToWrite) {
    let outSpan = document.createElement("SPAN");
    outSpan.setAttribute('style''vertical-align:14px;padding-right:5px;');
    outSpan.innerText = opToWrite;
    targetElement.appendChild(outSpan);
  }

  function addcss() {
    let styleHelper = document.createElement("style");
    styleHelper.id = 'styleHelper';
    styleHelper.innerHTML = `span.frac {
          display: inline-block;
          text-align: center;
        }

        span.frac>sup {
          display: block;
          border-bottom: 1px solid;
          font: inherit;
        }

        span.frac>span {
          display: none;
        }

        span.frac>sub {
          display: block;
          font: inherit;
        }`;
    targetElement.appendChild(styleHelper);
  }
  // the hand -> doing things
  let bruch = Fraction(NumberToUse);
  let ggt = calc_ggt(bruch[0], bruch[1]);
  addcss();
  writeOperatorOrLine(NumberToUse);
  writeOperatorOrLine("=");
  writeFraction(bruch[0], bruch[1]);
  writeOperatorOrLine(":");
  writeOperatorOrLine(ggt);
  writeOperatorOrLine("=");
  writeFraction(bruch[0] / ggtbruch[1] / ggt);
};
//)(0.45);
var inputElement = document.createElement("INPUT");
var buttonElement = document.createElement("BUTTON");
var targetOutElement = document.createElement("DIV");
buttonElement.innerHTML = "Calc";
buttonElement.onclick = () => {
  /*
  for(var mainCounter = 1; mainCounter < 100; mainCounter++ ) {
    myCalcer(
      mainCounter /
      Math.pow(10, ("" + mainCounter).length),
      targetElement
    );
    targetElement.appendChild(document.createElement("BR"));
    targetElement.appendChild(document.createElement("BR"));
  }
  */
  targetOutElement.innerHTML = "";
  let numberToUse = parseFloat(inputElement.value.replace(',''.'));
  myCalcer(numberToUsetargetOutElement);
};
targetOutElement.style.backgroundColor = "white";
targetOutElement.style.border = '1px solid black';
targetOutElement.style.borderRadius = '4px';
targetOutElement.style.padding = '10px';
targetOutElement.style.margin = 'auto';
targetOutElement.style.width = '200px';
targetOutElement.style.textAlign = 'center';
document.body.appendChild(inputElement);
document.body.appendChild(buttonElement);
document.body.appendChild(targetOutElement);

Hierbei teilt sich die Funktion myCalcer in 3 Teile. Der erste Teil sind die Berechnungsfunktionen. Der zweite Teil regelt die Ausgabe und der dritte Teil macht die Rechnung. Am Ende kommt noch ein bisschen Styling dazu, damit das auch was hermacht. Kann man direkt in der Konsole benutzen oder hier:

EOF


Cover Image

Mal schnell ein paar Zahlen

Mathehausaufgaben aus dem Zufallsgenerator

April 14, 2021 - Lesezeit: ~1 Minute

Und wieder hilft mir ein kleines Script in Übung zu bleiben.

for(let i =0; i<20; i++){
  var op     = parseInt((Math.random(i)*4).toString()); 
  var x        = parseInt((Math.random(i)*100).toString());
  var y        = parseInt((Math.random(i)*100).toString());
 
  if(op===0)    console.log(x + ' + '+y + ' = ' + (x+y));
  if(op===1)    console.log(x + ' - '+y + ' = ' + (x-y));
  if(op===2)    console.log(x + ' * '+y + ' = ' + (x*y));
  if(op===3)    console.log(x + ' / '+y + ' = ' + (x/y));
}

Aber man sollte natürlich nicht direkt das Ergebnis prüfen. Brüche kann der Gernerator auch nocht nicht. Den gibt es dann beim nächsten Mal.


Cover Image

Ist das Kunst oder kann das weg?

Shadertoy - shading online

April 11, 2021 - Lesezeit: 3 Minuten

Shader sind Bausteine einer Grafikkarte, mit der der Pixel, der auf den Bildschirm angezeigt werden soll, nachbearbeitet werden kann. Jeder Pixel wird hierbei durch eine Pipeline geschoben und kann dabei sozusagen nochmal nachgearbeitet werden. Dieses Post Processing kann Wasser realistischer aussehen lassen oder Lava zusätzlich zum glühen bringen. Diese Shader werden mithilfe einer eigenen Programmiersprache implementiert. Dazu schreibt man einen Shader und lädt diesen dann in die Grafikkarte. Meistens nutzt man dafür eine Api wie OpenGL oder DirectX.

blub.png

Nun kann man sich natürlich die Erzeugung eines Bildes zum Anzeigen und Nachbearbeiten auch sparen und einfach direkt die Pixel manipulieren und damit dann eine Bildschirmausgabe erzeugen. Da der Shadercode immer auf jeden einzelnen Pixel auf dem Bildschrim angewendet werden muss (das sind bei einer HD-Auflösung 3000 Pixel pro Frame), muss die Implementierung effizient sein. In der Demoszene hat sich eine ganze Disziplin daraus entwickelt. Da das Manipulieren von Pixeln am einfachsten ist wenn man es mathematisch beschreibt, kommt man bei der Programmierung um Mathe nicht drum herum. Aber dafür wird man mit hinreißenden Bildern und Effekten belohnt.

penrose.png

Auch ein Browser kann mithilfe von WebGL entsprechende Inhalte repräsentieren. Damit kann man die Shader direkt in eine Website laden und anzeigen. Entsprechende Hardware vorrausgesetzt. Auf Shadertoy wird genau das möglich. Man kann die fertigen Shader sogar in die eigene Homepage einbetten. Auf dieser Website kann man sich auch den Quelltext jedes Shaders ansehen und gegebenenfalls sogar noch etwas lernen. Mathe hat noch nie soviel Spass gemacht.

IO.png

Wenn man mal sehen will, was mit aktuellen Grafikarten machbar ist und sich verzaubern lassen möchte, sollte man mal einen Blick riskieren. Also ich werde jetzt nochmal meine Mathekenntnisse auffrischen und auch ein bisschen zaubern.