-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathczp.js
80 lines (77 loc) · 2.68 KB
/
czp.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
"use strict";
/*
* 2018/10/08- (c) [email protected]
*/
document.addEventListener("DOMContentLoaded", function(event) {
main();
});
function main() {
// console.debug("main");
var canvas = document.getElementById("canvas")
var widthRange = document.getElementById("widthRange");
var heightRange = document.getElementById("heightRange");
var thetaRange = document.getElementById("thetaRange");
var revRedCheckbox = document.getElementById("revRedCheckbox");
var revGreenCheckbox = document.getElementById("revGreenCheckbox");
var revBlueCheckbox = document.getElementById("revBlueCheckbox");
var scaleRange = document.getElementById("scaleRange");
var params = {
"width": parseFloat(widthRange.value),
"height": parseFloat(heightRange.value),
"theta": parseFloat(thetaRange.value),
"revRed": revRedCheckbox.checked,
"revGreen":revGreenCheckbox.checked,
"revBlue": revBlueCheckbox.checked,
"scale": parseFloat(scaleRange.value)
};
bindFunction({"widthRange":"widthText",
"heightRange":"heightText",
"thetaRange":"thetaText",
"revRedCheckbox":null,
"revGreenCheckbox":null,
"revBlueCheckbox":null,
"scaleRange":"scaleText"},
function() {
params["width"] = parseFloat(widthRange.value);
params["height"] = parseFloat(heightRange.value);
params["theta"] = parseFloat(thetaRange.value);
params["revRed"] = revRedCheckbox.checked;
params["revGreen"] = revGreenCheckbox.checked;
params["revBlue"] = revBlueCheckbox.checked;
params["scale"] = parseFloat(scaleRange.value);
drawCZP(canvas, params);
} );
drawCZP(canvas, params);
}
// http://wazalabo.com/scaling4.html
function drawCZP(canvas, params) {
// console.debug("drawCZP");
var ctx = canvas.getContext("2d");
var width = params.width;
var height = params.height;
var theta = params.theta;
var revRed = params.revRed;
var revGreen = params.revGreen;
var revBlue = params.revBlue;
var scale = params.scale;
canvas.width = width;
canvas.height = height;
//
var imageData = ctx.createImageData(width, height);
var cx = Math.PI / width / 2 / scale;
var cy = Math.PI / height / 2 / scale;
var t = theta * (2 * Math.PI) / 360;
for (var y = 0 ; y < height; y++) {
for (var x = 0 ; x < width; x++) {
var xx = (x - width/2);
var yy = (y - height/2);
var v = 128 * Math.sin(t + cx*xx*xx + cy*yy*yy) + 128;
var rgba = [v, v, v, 255];
var red = (revRed)?(255-v):v;
var green = (revGreen)?(255-v):v;
var blue = (revBlue)?(255-v):v;
setRGBA(imageData, x, y, [red, green, blue, 255]);
}
}
ctx.putImageData(imageData, 0, 0);
}