/*
** 두 점 A, B가 주어졌을 때 벡터 (B-A)가 x-축과 이루는 각을 [0,8)사이로 보내는
** 간단한 연산의 단조증가함수를 만들어 실제의 각을 대신하도록 한다.
** 실제 각을 다른 계산에 넣어 사용하지 않고 비교만 할 때 매우 유용하다.
** (0, 1, 2, 3, 4, 5, 6, 7, 8)은 각각 실제 각도
** (0, 45, 90, 135, 180, 225, 270, 315, 360)에 해당한다.
*/
double FowlerAngle(CPoint A, CPoint B) {
return FowlerAngle(B.x - A.x, B.y - A.y);
}
double FowlerAngle(double dx, double dy) {
double adx = dx < 0 ? -dx: dx;
double ady = dy < 0 ? -dy: dy;
int code = (adx < ady) ? 1: 0;
if (dx < 0) code += 2;
if (dy < 0) code += 4;
switch (code) {
case 0: if (dx == 0) return 0; /* dx = dy = 0 */
else return ady / adx; /* 0 <= angle <= 45 */
case 1: return 2 - adx / ady; /* 45 < angle <= 90 */
case 2: return 4 - ady / adx; /* 135 <= angle <= 180 */
case 3: return 2 + adx / ady; /* 90 < angle < 135 */
case 4: return 8 - ady / adx; /* 315 <= angle < 360 */
case 5: return 6 + adx / ady; /* 270 <= angle < 315 */
case 6: return 4 + ady / adx; /* 180 < angle <= 225 */
case 7: return 6 - adx / ady; /* 225 < angle < 270 */
}
};
728x90
'Image Recognition > Fundamental' 카테고리의 다른 글
Lanczos Resampling (0) | 2021.05.08 |
---|---|
Interpolation Kernels (0) | 2021.05.05 |
Brute-Force Euclidean Distance Transform (0) | 2021.03.14 |
이미지에 Poisson Noise 넣기 (0) | 2021.03.06 |
Grassfire Algorithm (0) | 2021.03.05 |