Engine prototype #13
@ -123,12 +123,24 @@ mutable struct ConstructionViewer
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
mprod(v, w) =
|
||||||
|
v[1]*w[1] + v[2]*w[2] + v[3]*w[3] + v[4]*w[4] - v[5]*w[5]
|
||||||
|
|
||||||
function display!(viewer::ConstructionViewer, elements::Matrix)
|
function display!(viewer::ConstructionViewer, elements::Matrix)
|
||||||
# load elements
|
# load elements
|
||||||
elements_full = [
|
elements_full = []
|
||||||
[0; elt; fill(0, 26)]
|
|
||||||
for elt in eachcol(elements)
|
for elt in eachcol(elements)
|
||||||
]
|
if mprod(elt, elt) < 0.5
|
||||||
|
elt_full = [0; elt; fill(0, 26)]
|
||||||
|
else
|
||||||
|
# `elt` is a spacelike vector, representing a generalized sphere, so we
|
||||||
|
# take its Hodge dual before passing it to Ganja.js. the dual represents
|
||||||
|
# the same generalized sphere, but Ganja.js only displays planes when
|
||||||
|
# they're represented by vectors in grade 4 rather than grade 1
|
||||||
|
elt_full = [fill(0, 26); -elt[5]; -elt[4]; elt[3]; -elt[2]; elt[1]; 0]
|
||||||
|
end
|
||||||
|
push!(elements_full, elt_full)
|
||||||
|
end
|
||||||
@js viewer.win elements = $elements_full.map((elt) -> @new CGA3(elt))
|
@js viewer.win elements = $elements_full.map((elt) -> @new CGA3(elt))
|
||||||
|
|
||||||
# generate palette. this is Gadfly's `default_discrete_colors` palette,
|
# generate palette. this is Gadfly's `default_discrete_colors` palette,
|
||||||
|
@ -28,6 +28,25 @@
|
|||||||
CGA3.inline(() => Math.sqrt(0.5)*(-1e1 - 1e2 + 1e3 + 1e5))(),
|
CGA3.inline(() => Math.sqrt(0.5)*(-1e1 - 1e2 + 1e3 + 1e5))(),
|
||||||
CGA3.inline(() => -Math.sqrt(3)*1e4 + Math.sqrt(2)*1e5)()
|
CGA3.inline(() => -Math.sqrt(3)*1e4 + Math.sqrt(2)*1e5)()
|
||||||
];
|
];
|
||||||
|
/*
|
||||||
|
these blocks of commented-out code can be used to confirm that a spacelike
|
||||||
|
vector and its Hodge dual represent the same generalized sphere
|
||||||
|
*/
|
||||||
|
/*let elements = [
|
||||||
|
CGA3.inline(() => Math.sqrt(0.5)*!( 1e1 + 1e2 + 1e3 + 1e5))(),
|
||||||
|
CGA3.inline(() => Math.sqrt(0.5)*!( 1e1 - 1e2 - 1e3 + 1e5))(),
|
||||||
|
CGA3.inline(() => Math.sqrt(0.5)*!(-1e1 + 1e2 - 1e3 + 1e5))(),
|
||||||
|
CGA3.inline(() => Math.sqrt(0.5)*!(-1e1 - 1e2 + 1e3 + 1e5))(),
|
||||||
|
CGA3.inline(() => !(-Math.sqrt(3)*1e4 + Math.sqrt(2)*1e5))()
|
||||||
|
];*/
|
||||||
|
/*let elements = [
|
||||||
|
CGA3.inline(() => 1e1 + 1e5)(),
|
||||||
|
CGA3.inline(() => 1e2 + 1e5)(),
|
||||||
|
CGA3.inline(() => 1e3 + 1e5)(),
|
||||||
|
CGA3.inline(() => -1e4 + 1e5)(),
|
||||||
|
CGA3.inline(() => Math.sqrt(0.5)*(1e1 + 1e2 + 1e3 + 1e5))(),
|
||||||
|
CGA3.inline(() => Math.sqrt(0.5)*!(1e1 + 1e2 + 1e3 - 0.01e4 + 1e5))()
|
||||||
|
];*/
|
||||||
|
|
||||||
// set up palette
|
// set up palette
|
||||||
var colorIndex;
|
var colorIndex;
|
||||||
@ -66,6 +85,7 @@
|
|||||||
|
|
||||||
// de-noise
|
// de-noise
|
||||||
for (let k = 6; k < elements[n].length; ++k) {
|
for (let k = 6; k < elements[n].length; ++k) {
|
||||||
|
/*for (let k = 0; k < 26; ++k) {*/
|
||||||
elements[n][k] = 0;
|
elements[n][k] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user