| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- export default class RobustDeterminant {
- static orientationIndex(p1, p2, q) {
- const dx1 = p2.x - p1.x
- const dy1 = p2.y - p1.y
- const dx2 = q.x - p2.x
- const dy2 = q.y - p2.y
- return RobustDeterminant.signOfDet2x2(dx1, dy1, dx2, dy2)
- }
- static signOfDet2x2(x1, y1, x2, y2) {
- let sign = null
- let swap = null
- let k = null
- let count = 0
- sign = 1
- if (x1 === 0.0 || y2 === 0.0)
- if (y1 === 0.0 || x2 === 0.0)
- return 0
- else if (y1 > 0)
- if (x2 > 0)
- return -sign
- else
- return sign
-
- else
- if (x2 > 0)
- return sign
- else
- return -sign
-
-
-
- if (y1 === 0.0 || x2 === 0.0)
- if (y2 > 0)
- if (x1 > 0)
- return sign
- else
- return -sign
-
- else
- if (x1 > 0)
- return -sign
- else
- return sign
-
-
-
- if (0.0 < y1) {
- if (0.0 < y2) {
- if (y1 <= y2) {
-
- } else {
- sign = -sign
- swap = x1
- x1 = x2
- x2 = swap
- swap = y1
- y1 = y2
- y2 = swap
- }
- } else
- if (y1 <= -y2) {
- sign = -sign
- x2 = -x2
- y2 = -y2
- } else {
- swap = x1
- x1 = -x2
- x2 = swap
- swap = y1
- y1 = -y2
- y2 = swap
- }
- } else
- if (0.0 < y2) {
- if (-y1 <= y2) {
- sign = -sign
- x1 = -x1
- y1 = -y1
- } else {
- swap = -x1
- x1 = x2
- x2 = swap
- swap = -y1
- y1 = y2
- y2 = swap
- }
- } else
- if (y1 >= y2) {
- x1 = -x1
- y1 = -y1
- x2 = -x2
- y2 = -y2
-
- } else {
- sign = -sign
- swap = -x1
- x1 = -x2
- x2 = swap
- swap = -y1
- y1 = -y2
- y2 = swap
- }
-
-
- if (0.0 < x1) {
- if (0.0 < x2)
- if (x1 <= x2)
- ;
- else
- return sign
-
- else
- return sign
- } else
- if (0.0 < x2) {
- return -sign
- } else
- if (x1 >= x2) {
- sign = -sign
- x1 = -x1
- x2 = -x2
-
- } else {
- return -sign
- }
-
-
- while (true) {
- count = count + 1
- k = Math.floor(x2 / x1)
- x2 = x2 - k * x1
- y2 = y2 - k * y1
- if (y2 < 0.0)
- return -sign
-
- if (y2 > y1)
- return sign
-
- if (x1 > x2 + x2) {
- if (y1 < y2 + y2)
- return sign
-
- } else {
- if (y1 > y2 + y2) {
- return -sign
- } else {
- x2 = x1 - x2
- y2 = y1 - y2
- sign = -sign
- }
- }
- if (y2 === 0.0)
- if (x2 === 0.0)
- return 0
- else
- return -sign
-
-
- if (x2 === 0.0)
- return sign
-
- k = Math.floor(x1 / x2)
- x1 = x1 - k * x2
- y1 = y1 - k * y2
- if (y1 < 0.0)
- return sign
-
- if (y1 > y2)
- return -sign
-
- if (x2 > x1 + x1) {
- if (y2 < y1 + y1)
- return -sign
-
- } else {
- if (y2 > y1 + y1) {
- return sign
- } else {
- x1 = x2 - x1
- y1 = y2 - y1
- sign = -sign
- }
- }
- if (y1 === 0.0)
- if (x1 === 0.0)
- return 0
- else
- return sign
-
-
- if (x1 === 0.0)
- return -sign
-
- }
- }
- }
|