두 점 사이의 모든 x, y 좌표를 직선으로 원합니다. 이것은 쉬운 작업처럼 보이지만, 나는 그 주위에 머리를 쓰지 않는 것 같습니다.2 점 사이의 모든 픽셀 좌표 얻기
그래서, 예를 들어
- 포인트 1 (10,5)
- 점 2 (15,90)
두 점 사이의 모든 x, y 좌표를 직선으로 원합니다. 이것은 쉬운 작업처럼 보이지만, 나는 그 주위에 머리를 쓰지 않는 것 같습니다.2 점 사이의 모든 픽셀 좌표 얻기
그래서, 예를 들어
주어진 점 A (10, 5) B (15, 90)와 AB에서 C (X, Y) 우리는이 :
(x - 10)/(y - 5) = (15 - 10)/(90 - 5)
당신이 할 수있는 것은 X = 10, X = 15 반복하고 해당 Y를 계산하는 것이다. x와 y는 정수이기 때문에 결과를 반올림하거나 건너 뛸 때가 있습니다.
편집 : 아래의 해결책은 기하학적 관점에서만 적용됩니다. 화면을 그리는 것이 이론적 인 기하학과 다른 경우 Bresenham의 알고리즘을 제안하는 사람들의 이야기를 들어야합니다.
, 두 점을 감안할 때, 그리고 라인의 방정식 m
가 기울기와 b
절편, 당신은 m
및 b
을 계산 한 후 X 축의 모든 값에 수식을 적용 할 수있다 y = m*x + b
이라고 알고 귀하의 A와 B 점수 사이 :
var A = [10, 5];
var B = [15, 90];
function slope(a, b) {
if (a[0] == b[0]) {
return null;
}
return (b[1] - a[1])/(b[0] - a[0]);
}
function intercept(point, slope) {
if (slope === null) {
// vertical line
return point[0];
}
return point[1] - slope * point[0];
}
var m = slope(A, B);
var b = intercept(A, m);
var coordinates = [];
for (var x = A[0]; x <= B[0]; x++) {
var y = m * x + b;
coordinates.push([x, y]);
}
console.log(coordinates); // [[10, 5], [11, 22], [12, 39], [13, 56], [14, 73], [15, 90]]
얼마 전에 그들은 사인, 코사인 및 탄젠트에 관해 학교에서 저를 가르칩니다. http://www.mathsisfun.com/sine-cosine-tangent.html –
Dupe - 참조 : http://stackoverflow.com/questions/4672279/bresenham-algorithm-in-javascript –
http :// /en.wikipedia.org/wiki/Bresenham%27s_line_algorithm – Alnitak