From ad6430a97feb33378ecd51f152284f0aaa52255c Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Mon, 25 Apr 2022 00:19:30 +0200 Subject: [PATCH] arb:: finish_apeirogon now works with material vertices too --- floorshapes.cpp | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/floorshapes.cpp b/floorshapes.cpp index 04632dfa..cf332c14 100644 --- a/floorshapes.cpp +++ b/floorshapes.cpp @@ -354,21 +354,27 @@ void geometry_information::finish_apeirogon(hyperpoint center) { last->flags |= POLY_APEIROGONAL; last->she = isize(hpc); hyperpoint b = hpc.back(); - for(int i=1; i<15; i++) hpcpush(towards_inf(b, center, i)); - hyperpoint h = 1e-9 * C0 + center; - if(material(h) > 0) - hpcpush(normalize(h)); - else { - ld left = -atan2(towards_inf(b, center, 15)); - ld right = -atan2(towards_inf(hpc[last->s], center, 15)); - if(right > left + 180*degree) right -= 360*degree; - if(right < left - 180*degree) right += 360*degree; - hyperpoint l1 = towards_inf(b, center, 15); l1 /= l1[2]; - hyperpoint l2 = xspinpush0(left, 15); l2 /= l2[2]; - /* call hpc.push_back directly to avoid adding points */ - for(int i=0; i<=10; i++) hpc.push_back(xspinpush0(lerp(left, right, i/10.), 15)); + if(material(-1e-9 * C0 + center) > 0) { + hpcpush(normalize(center)); + } + else { + for(int i=1; i<15; i++) hpcpush(towards_inf(b, center, i)); + hyperpoint h = 1e-9 * C0 + center; + if(material(h) > 0) + hpcpush(normalize(h)); + else { + ld left = -atan2(towards_inf(b, center, 15)); + ld right = -atan2(towards_inf(hpc[last->s], center, 15)); + if(right > left + 180*degree) right -= 360*degree; + if(right < left - 180*degree) right += 360*degree; + hyperpoint l1 = towards_inf(b, center, 15); l1 /= l1[2]; + hyperpoint l2 = xspinpush0(left, 15); l2 /= l2[2]; + println(hlog, "doing that ", left, "..", right); + /* call hpc.push_back directly to avoid adding points */ + for(int i=0; i<=10; i++) hpc.push_back(xspinpush0(lerp(left, right, i/10.), 15)); + } + for(int i=15; i>=1; i--) hpcpush(towards_inf(hpc[last->s], center, i)); } - for(int i=15; i>=1; i--) hpcpush(towards_inf(hpc[last->s], center, i)); hpcpush(hpc[last->s]); }