mirror of
https://github.com/danbulant/introductionToProgramming
synced 2026-06-20 15:01:29 +00:00
improved plasma clouds
This commit is contained in:
parent
90b439f5de
commit
d4f4778a5d
1 changed files with 27 additions and 9 deletions
|
|
@ -11,23 +11,41 @@ public class PlasmaClouds {
|
||||||
|
|
||||||
StdDraw.enableDoubleBuffering();
|
StdDraw.enableDoubleBuffering();
|
||||||
|
|
||||||
draw(.5, .5, 1, 1, variance, s);
|
draw(.5, .5, 1, StdRandom.uniformDouble(), StdRandom.uniformDouble(), StdRandom.uniformDouble(), StdRandom.uniformDouble(), variance, s);
|
||||||
|
|
||||||
StdDraw.show();
|
StdDraw.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void draw(double x, double y, double halfSize, double color, double var, double s) {
|
// c = color ("color vertical horizontal")
|
||||||
if (halfSize < 0.01) {
|
// t = top
|
||||||
StdDraw.setPenColor((int) (color * 255), (int) (color * 255), 255);
|
// r = right
|
||||||
|
// l = left
|
||||||
|
// m = middle (horizontal)
|
||||||
|
// c = center (vertical)
|
||||||
|
public static void draw(double x, double y, double halfSize, double ctl, double ctr, double cbl, double cbr, double var, double s) {
|
||||||
|
var color = (ctl+ctr+cbl+cbr) / 4;
|
||||||
|
if (halfSize < 1/512.) {
|
||||||
|
var clamped = Math.clamp(color, 0, 1);
|
||||||
|
StdDraw.setPenColor((int) (clamped * 255), (int) (clamped * 255), 255);
|
||||||
StdDraw.filledRectangle(x, y, halfSize, halfSize);
|
StdDraw.filledRectangle(x, y, halfSize, halfSize);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var newColor = Math.clamp(StdRandom.gaussian(color, Math.sqrt(var)), 0, 1);
|
var newColor = StdRandom.gaussian(color, Math.sqrt(var));
|
||||||
var newVar = var / s;
|
var newVar = var / s;
|
||||||
var newHalfSize = halfSize / 2;
|
var newHalfSize = halfSize / 2;
|
||||||
int[][] offsets = { { 1, 1 }, { -1, 1 }, { -1, -1 }, { 1, -1 } };
|
|
||||||
for (var offset : offsets) {
|
var ctm = (ctl + ctr) / 2;
|
||||||
draw(x + newHalfSize * offset[0], y + newHalfSize * offset[1], newHalfSize, newColor, newVar, s);
|
var cbm = (cbl + cbr) / 2;
|
||||||
}
|
var ccl = (cbl + ctl) / 2;
|
||||||
|
var ccr = (cbr + ctr) / 2;
|
||||||
|
|
||||||
|
// tl
|
||||||
|
draw(x - newHalfSize, y - newHalfSize, newHalfSize, ctl, ctm, ccl, newColor, newVar, s);
|
||||||
|
// tr
|
||||||
|
draw(x + newHalfSize, y - newHalfSize, newHalfSize, ctm, ctr, newColor, ccr, newVar, s);
|
||||||
|
// bl
|
||||||
|
draw(x - newHalfSize, y + newHalfSize, newHalfSize, ccl, newColor, cbl, cbm, newVar, s);
|
||||||
|
// br
|
||||||
|
draw(x + newHalfSize, y + newHalfSize, newHalfSize, newColor, ccr, cbm, cbr, newVar, s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue