Rework me on GitHub

Cheap 3-D

root (Edward Gerhold)

Es muss nicht immer gleich eine ganze Grafik-Pipeline sein, nur, um eine Schraublinie zu ziehen. Man dreht das xy-System nach unten und addiert den z-Wert zur Vertikalen. Die Projektion ist damit natürlich orthogonal. Ein perspektivisches Verhältnis müsste in einer weiteren Zeile vor dem addieren des z-Werts ausgerechnet werden.

.

 

Die folgende Funktion trafo wandelt die 3-D Punkte (x,y,z) in 2-D Punkte (x,y) um. Die draw Funktion zeigt, wie man mit lineTo Punkt für Punkt verbindet.

/*
Die zentrale Funktion trafo: 3-D nach 2-D Transformation in sieben Zeilen.
*/
function trafo(points, scale) {
var newPoints = [];
var x,y,z, x_1,y_1,x_2,y_2,x_3,y_3;
for (var i = 0; i < points.length; i+=3) {
x = points[i];
y = points[i+1];
z = points[i+2];
x_1 = Math.cos(xAngle)*x -Math.sin(xAngle)*y;
y_1 = Math.sin(xAngle)*x +Math.cos(xAngle)*y;
x_2 = Math.cos(yAngle)*x_1 -Math.sin(yAngle)*y_1; // fragen: vielleicht noch tauschen von (x_1,y_1) nach (-y_1,x_1)
y_2 = Math.sin(yAngle)*x_1 +Math.cos(yAngle)*y_1; // und danach zurück. Hab ich wie das 90° tauschen von sin und cos nicht ausprobiert.
y_2 += z;
x_3 = Math.cos(zAngle)*x_2 -Math.sin(zAngle)*y_2;
y_3 = Math.sin(zAngle)*x_2 +Math.cos(zAngle)*y_2;
newPoints.push(x_3,y_3);
}
return newPoints;
}

/*
Die draw Funktion nimmt einen Array x, y nebeneinander und vebindet alle Punkte mit einem lineTo
*/

function draw(points, op) {
op = op || {};
var newPoints;
var scale = 2;
newPoints = trafo(points, op.scale);
context.save();
context.beginPath();
context.moveTo(-x,-y);
if (op) {
if (op.scale) scale = op.scale;
if (op.color) context.strokeStyle = op.color;
if (op.fill) context.fillStyle = op.fill;
if (op.line) context.lineWidth = op.line;
if (op.compo) context.globalAlphaComposition = op.compo;
if (op.alpha) context.globalAlpha = op.alpha;
}
var i = 0;
var x = newPoints[i],
y= newPoints[i+1];
var y_1,x_1;
// Verbinden vom ersten bis zum letzten Punkt ist die Aufgabe
for (var i = 0; i < newPoints.length; i+=2) {
x = newPoints[i];
y = newPoints[i+1];
context.lineTo(-x,-y);
}
if (op.fill) context.fill();
if (op.color) context.stroke();
context.closePath();
context.restore();
}

Beim überlegen, ob das mit den Winkeln für die Achse stimmt, ist das Ausprobieren noch nicht beendet. Es gibt die Möglichkeit im zweiten Schritt x und y erstmal zu tauschen, und nach der Transformation wieder zurück zu tauschen und dann den z-Wert hinzuzuzählen.

Um den Einstieg leichter zu machen, hier noch was Sample Code, um Achsen zu zeichnen, und surfaces mit f(x,y) zu plotten. Bei letzteren sollte man darauf achten, sich im kleinen Intervall zu bewegen, wie [-1,1] und dann ordentlich zu skalieren. Wenn man Oberflächen plottet, zieht man ein paar Kurven von x0 bis xn und ein paar von y0 bis yn und hält die andere Koordinate y, bzw. x konstant. 

cheap3d.html zum selbst editieren


var xAngle = rad(135);
var yAngle = rad(225);
var zAngle = rad(1);

function rad(dg) {
return Math.PI/180*dg;
}

function f(x,y) { // Parabel auf der x-y Ebene nach +z geöffnet. Mit (0,0,0) als tiefsten Punkt
return (x*x+y*y);
}

function axes() {
var X=[];
for (var x = -50; x < 200; x+=10) X.push(x,0,0);
var Y=[];
for (var y = -50; y < 200; y+=10) Y.push(0,y,0);
var Z=[];
for (var z = -50; z < 200; z+=10) Z.push(0,0,z);
draw(X, {
color: "red"
});
draw(Y, {
color: "yellow"
});
draw(Z, {
color: "green"
});
}
function plot(op) {
var domRangX = op.X;
var domRangY = op.Y;
var u = op.f;
var XP, YP;
var x = domRangX[0];
var x_1 = domRangX[1];
var delta_x = op.dX || 1;
var y = domRangY[0];
var y_1 = domRangY[1];
var delta_y = op.dY || 1;
// paint the curves in y direction with x fixed
for (y=domRangY[0];y<=y_1;y+=delta_y) {
XP = [];
for (x=domRangX[0];x<=x_1;x+=delta_x) {
var z = u(x,y);
XP.push(x,y,z);
}
draw(XP, {
color: op.xcolor,
scale: op.scale,
line:0.1
});
}
// paint the curves in y direction, with x fixed
for (x=domRangX[0];x<=x_1;x+=delta_x) {
YP = [];
for (y=domRangY[0];y<=y_1;y+=delta_y) {
var z = u(x,y);
YP.push(x,y,z);
}
draw(YP, {
color: op.ycolor,
scale: op.scale,
line: 0.1
});
}
}

function surfaces(scale) {
plot({
f: f,
X: [-8,8], // Das x-Intervall. Um den Plot sehen zu können, muss skaliert werden.
dX: 0.1, // x-Abstand der Linien
Y: [-8,8], // Macht man das Intervall grösser, schiessen die z-Werte in die Höhe
dY: 0.1, // y-Abstand der Linien
scale: scale || 1,

xcolor: "darkgrey",
ycolor: "lightgrey"
});
}

function translate(points, vector) {
var new_points = [];
var w;
for (var i = 0; i < points.length;i+=3) {
if (w=vector[0]) new_points[i]=points[i]+w;
if (w=vector[1]) new_points[i+1]=points[i+1]+w;
if (w=vector[2]) new_points[i+2]=points[i+2]+w;
}
return new_points;
}


ES6 - destructuring, block scope, generators, modules, ...

root (Edward Gerhold)

Final Draft

This is the final draft of ECME-262 6th Edition, The 2015 ECMAScript Language Specification. This draft has been submitted to the Ecma General Assembly members for their review and consideration. The GA will vote on approving it as a Ecma standard at their June 2015 meeting.

Assuming GA approval, it will still be possible to make very minor editorial corrections in the published version. So, please continue to report any bugs or typos at bugs.ecmascript.org

April 14, 2015 Rev 38 Final Draft

doc
pdf, no change markup pdf with rev38 change markup
Changes marked as “Rev 38“. Change markup is relative to Release Candidate 4 (Rev37).

Changes include:

  • Tweaked completion value generation for iteration statements to enable loop unrolling.
  • Resolved bugs: 4279, 4274-4269, 4266-4258, 4256-4254, 4252-4248, 4133

Release Candidate Drafts

Development of the ECME-262 6h Edition, The 2015 ECMAScript Language Specification is complete. All that remains to find and fix and remaining editorial or technical bugs in the document.
Please report any bugs or typos at bugs.ecmascript.org

April 3, 2015 Rev 37 Release Candidate 4

doc, this is release candidate 4 with cumulative markup
pdf, no change markup pdf with rev37 change markup pdf with cumulative change markup
Changes marked as “Rev 37“. Change markup is cumulative starting with Release Candidate 1 (Rev34).

Changes include:

  • Various formatting tweaks and editorial and technical bug fixes.
  • Resolved bugs: 4247-4242, 4241-4240, 4238-4213, 4211-4202, 4200-4192, 4191-4185, 4183-4169, 4133

March 17, 2015 Rev 36 Release Candidate 3

doc, this is release candidate 3 with cumulative markup
pdf, no change markup pdf with rev36 change markup pdf with cumulative change markup
Changes marked as “Rev 36“. Change markup is cumulative starting with Release Candidate 1 (Rev34).

Changes include:

  • Several significant fixes relating to “completion reform”
  • Various formatting tweaks and minor editorial and technical bug fixes.
  • Resolved bugs: 4167-4166, 4163=4154, 4151=4148, 4145-4144, 4142, 4139-4125, 4123-4109, 4066, 3618, 3442, 1274, 522

March 4, 2015 Rev 35 Release Candidate 2

doc, this is release candidate 2 with rev35 change markup
pdf, no change markup pdf with rev35 change markup
Changes marked as “Rev 35“. Change markup is cumulative starting with Release Candidate 1 (Rev34).

Changes include:

  • Reverted back to no legacy RegExp.proptotype recognition in RegExp.prototype.exec and test
  • Eliminated buggy exotic [[Enumerate]] for String and Integer Indexed exotic objects. Tweaked ordinary [[Enumerate]] so it will work for them
  • Eliminate ambiguous optional tag on semicolon in do-while statement grammar. Added ASI rule to handle the case where that semicolon is missing.
  • Various formatting tweaks and minor editorial and technical bug fixes.
  • Resolved bugs: 4107-4104, 4101-4099, 4097-4096, 4094, 4091-4089, 4087-4084, 4082-4043, 4041-020, 4018-4013, 4000, 3993, 3989, 3979, 3965, 3865, 1223

February 20, 2015 Rev 34 Release Candidate 1

doc, this is release candidate 1 with with no change markup doc, this is release candidate 1 with cumulative markup
pdf, no change markup pdf with rev34 change markup pdf with cumulative change markup since rev22
Changes marked as “Rev 34“.

Changes include:

  • For legacy compatibility, Array.prototype goes back to being an Array exotic object (Array.isArray(Array.prototype) answers true).
  • For legacy compatibility, RegExp.prototype.exec.call/test.call act as if %RegExpPrototype% was still an RegExp instance
  • TypedArray slice, copyWith, set(TypedArray) do encoding preserving (memcopy) transfers when the source and target element types are the same.
  • The ‘next’ method of internally generated list iterator objects and the ‘revoke’ method of the object returned by Proxy.revocable are now non-enumerable, consistent with other built-in methods
  • Renamed Put() abstract operation to Set()
  • Eliminate the [lexical goal] grammar annotation. Instead clarified the explanation of lexical goals in clause 11
  • Eliminated Annexes D.2, D.3, E.2 that copying the ES5/51 Annex D/E into ES6. Too confusing because of section number mismatches. People should just look at Annex D/E of Es 5/5.1
  • Resolved bugs: 4012, 4010, 4005- 4002, 3999, 3995-3992, 3990-3985, 3983-3935, 3933- 3931, 3929-3902, 3900-3880, 3878-3861, 3859-3858, 3856-3846, 3791, 3759, 3753, 3751-3746, 3724, 3694, 3596, 3504, 3490, 3294, 3279, 3138-3137, 3114, 3074, 2916, 2401, 2215, 1801, 1782, 1778, 1770, 1522-1521, 1075, 1059, 635, 172, 116

Quanten

root (Edward Gerhold)

Gestern und vorgestern habe ich meine ersten Aufgaben der Quantenmechanik gelöst.

 Insbesondere die Schrödingergleichung, die Wellenfunktion, rechnen mit ket- und bra und relativen Wahrscheinlichkeiten sowie Systemzuständen,. erzeugen von Hamilton-Operatoren und Matrixmultiplikation, einsetzen von anderen Operatoren, wie Zustand erhöhen oder erniedrigen. Alles in allem ein Sprung ins kalte Wasser und eine Denknuss nach der anderen. Aber es ist machbar.

Natürlich setze ich das fort, wo ich mich bereits für ein an die Mathematik anschliessendes Selbststudium von Physik, Chemie und auch Wirtschaft entschieden habe.

Hehe, ich hab noch mehr Aufgaben :)

Kopfrechner

root (Edward Gerhold)

Mittlerweile habe ich einige numerische Verfahren handschriftlich ausgerechnet.

Und auch Integraltransformationen habe ich mir beigebracht.

Gerade übe ich Differentialgleichungen ausrechnen. Natürlich ohne Taschenrechner. 

Jetzt sind die Übungsblätter der letzte Hit. 

Lücken stopfen

root (Edward Gerhold)

Heute frisch aus dem Drucker:

Lineare Integralgleichungen

Variationsrechung

Ich habe hier noch Nachholbedarf.

Muss erstmal gucken, ob die PSB auf hat, damit ich lochen und einen Heftstreifen reinstecken kann.

Werde natürlich primär mit der Numerik weitermachen. Ich hatte das geschrieben, weil es Zeit ist, damit fertig zu werden.