From 9c227730970657a08ddee95c7287469e651d85d7 Mon Sep 17 00:00:00 2001 From: Emre Hasegeli Date: Sun, 19 Jun 2016 14:32:34 +0200 Subject: [PATCH] fix-line-interpt --- src/backend/utils/adt/geo_ops.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/backend/utils/adt/geo_ops.c b/src/backend/utils/adt/geo_ops.c index 657bcee..6ff7174 100644 --- a/src/backend/utils/adt/geo_ops.c +++ b/src/backend/utils/adt/geo_ops.c @@ -1236,22 +1236,24 @@ line_interpt_internal(LINE *l1, LINE *l2) x = l1->C; y = (l2->A * x + l2->C); } else if (FPzero(l2->B)) /* l2 vertical? */ { x = l2->C; y = (l1->A * x + l1->C); } else { - x = (l1->C - l2->C) / (l2->A - l1->A); - y = (l1->A * x + l1->C); + x = (l1->B * l2->C - l2->B * l1->C) / (l1->A * l2->B - l2->A * l1->B); + y = (l1->A * x + l1->C) / l1->B; + if (y != 0.0) + y = -y; } result = point_construct(x, y); #ifdef GEODEBUG printf("line_interpt- lines are A=%.*g, B=%.*g, C=%.*g, A=%.*g, B=%.*g, C=%.*g\n", DBL_DIG, l1->A, DBL_DIG, l1->B, DBL_DIG, l1->C, DBL_DIG, l2->A, DBL_DIG, l2->B, DBL_DIG, l2->C); printf("line_interpt- lines intersect at (%.*g,%.*g)\n", DBL_DIG, x, DBL_DIG, y); #endif return result; -- 2.7.4 (Apple Git-66)