Walsh matrix: Difference between revisions

→‎{{header|Wren}}: Added a DOME version.
(Added Wren)
(→‎{{header|Wren}}: Added a DOME version.)
Line 218:
{{libheader|Wren-matrix}}
{{libheader|Wren-fmt}}
===Wren-cli===
Text mode version.
<syntaxhighlight lang="ecmascript">import "./matrix" for Matrix
import "./fmt" for Fmt
Line 385 ⟶ 387:
| 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1|
</pre>
 
===DOME===
{{libheader|DOME}}
{{libheader|Wren-polygon}}
Image mode version.
<syntaxhighlight lang="ecmascript">import "dome" for Window
import "input" for Keyboard
import "graphics" for Canvas, Color
import "./matrix" for Matrix
import "./polygon" for Square
 
var walshMatrix = Fn.new { |n|
var walsh = Matrix.new(n, n, 0)
walsh[0, 0] = 1
var k = 1
while (k < n) {
for (i in 0...k) {
for (j in 0...k) {
walsh[i+k, j] = walsh[i, j]
walsh[i, j+k] = walsh[i, j]
walsh[i+k, j+k] = -walsh[i, j]
}
}
k = k + k
}
return walsh
}
 
var signChanges = Fn.new { |row|
var n = row.count
var sc = 0
for (i in 1...n) {
if (row[i-1] == -row[i]) sc = sc + 1
}
return sc
}
 
var WalshNaturalCache = {}
var WalshSequencyCache = {}
 
for (order in [2, 4, 5]) {
var n = 1 << order
var w = walshMatrix.call(n).toList
WalshNaturalCache[order] = w
}
 
for (order in [2, 4, 5]) {
var n = 1 << order
var rows = WalshNaturalCache[order].toList
rows.sort { |r1, r2| signChanges.call(r1) < signChanges.call(r2) }
WalshSequencyCache[order] = rows
}
 
class WalshMatrix {
construct new() {
Window.title = "Walsh Matrix"
Window.resize(1020, 750)
Canvas.resize(1020, 750)
var bc = Color.black
for (natural in [true, false]) {
if (natural) {
Canvas.print("NATURAL ORDERING", 450, 10, Color.blue)
} else {
Canvas.print("SEQUENCY ORDERING", 450, 400, Color.blue)
}
var z = 10
for (order in [2, 4, 5]) {
var y = natural ? 30 : 420
var mat = natural ? WalshNaturalCache[order] : WalshSequencyCache[order]
var n = 1 << order
var size = 320 / n
for (row in mat) {
var x = z
for (i in row) {
var fc = (i == 1) ? Color.green : Color.red
var sq = Square.new(x, y, size)
sq.drawfill(fc, bc)
x = x + size
}
y = y + size
}
z = z + 340
}
}
}
 
init() {}
 
update() {}
 
draw(alpha) {}
}
 
var Game = WalshMatrix.new()</syntaxhighlight>
 
[[File:Wren_Walsh_matrix.png|500px|thumb|center]]
9,482

edits