0
내가 points[i+2]
를 사용할 때이 오류가 계속를 사용하는 경우 형식 오류를 받고, 에러를 반환하지 않습니다,하지만 points[i+1]
(라인 60)을 사용하는 들일 경우 예상대로 작동하지 않습니다. 이 오류가 왜 발생하는지 파악할 수 없습니다. 나는 콘솔을 들여다 보았고 undefined
이 일 것임을 알지 못한다.
var canvas = document.getElementById('canvas');
canvas.width = canvas.clientWidth;
canvas.height = canvas.clientHeight;
var ctx = canvas.getContext('2d');
var GLOBAL = {};
var point1 = [300, 300];
var point2 = [245, 55];
var point3 = [23, 143];
var point4 = [40, 200];
/*
* y = mx + b
* b = y - mx
* m = y - b/x
* x = y - b/m
*/
function lineSide(a, b, c) {
var m = (b[1] - a[1])/(b[0] - a[0]);
var b = a[1] - (m * a[0]);
var result = function(x, y) {
if (y < m * x + b) return 0;
else if (y > m * x + b) return 1;
else if (y == m * x + b) return 2;
//TODO implement error handling
}(c[0], c[1]);
switch (result) {
case 0:
return 'lt';
break;
case 1:
return 'gt';
break;
case 2:
return 'eq';
break;
default:
return 'asdf';
break;
}
}
function inBounds(p, points) {
var bcheck = [],
pcheck = [];
for (var i = 0; i < points.length; i++) {
var pointa, pointb;
if (i + 1 >= points.length) {
pointa = points[i];
pointb = points[0];
bcheck.push(lineSide(pointa, pointb, points[1]));
} else {
pointa = points[i];
pointb = points[i + 1];
console.log(i + 2);
console.log(points[i + 2]);
bcheck.push(lineSide(pointa, pointb, points[i + 2])); // <-- THE PROBLEM AREA.
}
}
// console.log(bcheck);
for (var i = 0; i < points.length; i++) {
var pointa, pointb;
if (i + 1 >= points.length) {
pointa = points[i];
pointb = points[0];
pcheck.push(lineSide(pointa, pointb, p));
} else {
pointa = points[i];
pointb = points[i + 1];
pcheck.push(lineSide(pointa, pointb, p));
}
}
console.log(pcheck)
for (var i in bcheck) {
if (bcheck[i] != pcheck[i]) return false;
}
return true;
}
canvas.onmousemove = function(e) {
GLOBAL.mouseX = e.clientX;
GLOBAL.mouseY = e.clientY;
}
function render() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
if (inBounds([GLOBAL.mouseX, GLOBAL.mouseY], [point1, point2, point3, point4])) {
ctx.fillStyle = 'red';
} else {
ctx.fillStyle = 'black';
}
ctx.beginPath();
ctx.moveTo(point1[0], point1[1]);
ctx.lineTo(point2[0], point2[1]);
ctx.lineTo(point3[0], point3[1]);
ctx.lineTo(point4[0], point4[1]);
ctx.closePath();
ctx.fill();
window.requestAnimationFrame(render);
}
render();
'c' 함수''inBounds'의 포인트 [I] '로 정의되지만, 배열의 마지막에 iteriation points''가'c'가 정의되고, 그 이유를 알아낼 수 없다 – spacegeek224
죄송합니다. 나는 'points'를 정의하는 곳을 놓쳤습니다. 그것은 배열의 배열, 귀하의 루프와 함께 문제가됐다. – fotijr
마우스와'points [] '에 의해 정의 된 모양 사이의 충돌을 감지하려고합니다. – spacegeek224