From 5c1ab36b166fbf63b1710de65c0ea9410434ba94 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Sat, 7 Jan 2023 23:28:02 +0100 Subject: [PATCH] auto-configure S2xR embedding for Euclidean cylinder --- geometry.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/geometry.cpp b/geometry.cpp index 2bd12bfb..1556ac5f 100644 --- a/geometry.cpp +++ b/geometry.cpp @@ -1447,6 +1447,7 @@ EX void switch_always3() { } } if(spatial_embedding == seCliffordTorus) configure_clifford_torus(); + if(spatial_embedding == seProductS) configure_product_cylinder(); } else { vid.always3 = false; @@ -1489,6 +1490,18 @@ EX void switch_always3() { vid.eye = vid.wall_height / 2 - vid.depth; } + EX void configure_product_cylinder() { + rug::clifford_torus ct; + hyperpoint vec; + if(sqhypot_d(2, ct.yh) < 1e-6) vec = ct.yh; + else if(sqhypot_d(2, ct.xh) < 1e-6) vec = ct.xh; + else vec = hyperpoint(10, 0, 0, 0); + + euclid_embed_scale = TAU / hypot_d(2, vec); + euclid_embed_scale_y = 1; + euclid_embed_rotate = atan2(vec[1], vec[0]) / degree; + } + EX } EX geometry_information *cgip;