ref: 712ec411c9e9aafb1fb6e1de942c0f437548f677
parent: 5a0b85926a68e47864e57c7b96b858a3eec37e7e
author: Andrew Apted <ajapted@gmail.com>
date: Sat Dec 9 06:17:15 EST 2023
implemented BSP_SameDirection().
--- a/nano_bsp.c
+++ b/nano_bsp.c
@@ -216,6 +216,19 @@
return 0;
}
+boolean BSP_SameDirection (seg_t * part, seg_t * seg)
+{+ fixed_t pdx = part->v2->x - part->v1->x;
+ fixed_t pdy = part->v2->y - part->v1->y;
+
+ fixed_t sdx = seg->v2->x - seg->v1->x;
+ fixed_t sdy = seg->v2->y - seg->v1->y;
+
+ int64_t n = (int64_t)sdx * (int64_t)pdx + (int64_t)sdy * (int64_t)pdy;
+
+ return (n > 0);
+}
+
int BSP_SegOnSide (seg_t * part, seg_t * seg)
{int side1 = BSP_PointOnSide (part, seg->v1->x, seg->v1->y);
@@ -222,12 +235,7 @@
int side2 = BSP_PointOnSide (part, seg->v2->x, seg->v2->y);
if (side1 == 0 && side2 == 0)
- {- // FIXME
- boolean on_right = false;
-
- return on_right ? +1 : -1;
- }
+ return BSP_SameDirection (part, seg) ? +1 : -1;
// splits the seg?
if ((side1 *= side2) < 0)
--
⑨