Кто может подсказать, в чём проблема моего кода?
Я хочу определить положение точки относительно линии.
Руководствовался этим, метод Point::classify
Сам я сделал его на JavaScript:
Код: Выделить всё
function testPos() {
var line = [[51.503844,-0.266659],[51.504226,-0.266873]];
var points = [{c:[51.503874,-0.266653], l:'327'}, {c:[51.504139,-0.266791], l:'339'}, {c:[51.504190,-0.266882], l:'328'}, {c:[51.503852,-0.266718], l:'324'}];
for (var i = 0; i < points.length; i++) {
var pt = points[i];
console.log(pt.l);
var p0 = line[0];
var p1 = line[1];
var a = {
x: p1[0] - p0[0],
y: p1[1] - p0[1]
};
var b = {
x: pt.c[0] - p0[0],
y: pt.c[1] - p0[1]
};
var func = a.x * b.y - b.x * a.y;
if (func > 0) {
if (((a.x * b.x) < 0) || ((a.y * b.y) < 0)) {
console.log('Point behind and left');
} else if ((Math.sqrt(a.x * a.x + a.y * a.y)) < (Math.sqrt(b.x * b.x + b.y * b.y))) {
console.log('Point beyond and left');
} else {
console.log('Point left');
}
} else if (func < 0) {
if (((a.x * b.x) < 0) || ((a.y * b.y) < 0)) {
console.log('Point behind and right');
} else if ((Math.sqrt(a.x * a.x + a.y * a.y)) < (Math.sqrt(b.x * b.x + b.y * b.y))) {
console.log('Point beyond and right');
} else {
console.log('Point right');
}
} else {
console.log('other');
}
}
}