안드로이드 개발 질문/답변
(글 수 45,052)
현재 a지점에 있는 그림을 b지점으로 옮기기 위해 사용한 좌표 이동 부분 코드입니다
1. max_x, max_y는 목표지점 좌표
2. x, y는 현재 좌표
3. defaultX, defaultY는 처음 움직임을 시작한 좌표(목적지까지의 거리를 구하기 위해)
4. moveDistanceX, moveDistanceY는 방향설정(1은 +, -1은 -)
삼각함수를 사용해서 목표지점까지의 각도를 구한 후 해당 각만큼 설정해서 이동하는 부분인데
돌리면 전혀 다른 방향으로 움직이네요.. 어떻게 설정값을 해야 할까요?
if (x >= mView.getWidth() - width - xSpeed || x + xSpeed <= 0) {
xSpeed = -xSpeed;
}
double dx = max_x - defaultX;
double dy = max_y - defaultY;
if(movingX.equals("move")) {
if (moveDistanceX > 0) {
if(max_x > 0 ) { // X좌표 +
if(max_x > x){
Log.e("1. max_x > x", "y != max_y / y " + y + " max_y " + max_y);
x = x + Math.cos(Math.toDegrees(Math.tan(dx/dy) * Math.PI/180)) * xSpeed;
} else {
movingX = "stop";
}
//Log.e("dx dy ", "dx : " + dx + " dy : " + dy + " / dy/dx : " + dy/dx);
//Log.e("1. max_x > x", "x : " + x + " / todegrees " + Math.toDegrees(Math.tan(dy/dx) * Math.PI/180));
}
} else {
if(max_x > 0) { // X좌표 -
if(max_x < x) {
Log.e("2. max_x < x", "y != max_y / y " + y + " max_y " + max_y);
x = x - Math.cos(Math.toDegrees(Math.tan(dx/dy) * Math.PI/180)) * xSpeed;
} else {
movingX = "stop";
}
//Log.e("dx dy ", "dx : " + dx + " dy : " + dy + " / dy/dx : " + dy/dx);
//Log.e("2. max_x < x", "x : " + x + " / todegrees " + Math.toDegrees(Math.tan(dy/dx) * Math.PI/180));
}
}
}
if(movingY.equals("move")) {
if (moveDistanceY > 0) {
if(max_y > 0 ) { // Y좌표 +
if(max_y > y){
Log.e("3. max_y > y", "x != max_x / x " + x + " max_x " + max_x);
y = y + Math.sin(Math.toDegrees(Math.tan(dx/dy) * Math.PI/180)) * ySpeed;
} else {
movingY = "stop";
}
//Log.e("dx dy ", "dx : " + dx + " dy : " + dy + " / dy/dx : " + dy/dx);
//Log.e("3. max_y > y", "y : " + y + " / todegrees " + Math.toDegrees(Math.tan(dy/dx) * Math.PI/180));
}
} else {
if(max_y > 0 ) { // Y좌표 -
if(max_y < y){
Log.e("4. max_y < y", "x != max_x / x " + x + " max_x " + max_x);
y = y - Math.sin(Math.toDegrees(Math.tan(dx/dy) * Math.PI/180)) * ySpeed;
} else {
movingY = "stop";
}
//Log.e("dx dy ", "dx : " + dx + " dy : " + dy + " / dy/dx : " + dy/dx);
//Log.e("4. max_y < y", "y : " + y + " / todegrees " + Math.toDegrees(Math.tan(dy/dx) * Math.PI/180));
}
}
}
if (y >= botton - height - ySpeed || y + ySpeed <= top) {
ySpeed = -ySpeed;
}




x = x + radius * cos( radian );
y = y + radius * sin( radian );
식으로 하시면 될거에요
x = x + Math.cos(Math.toDegrees(Math.tan(dx/dy) * Math.PI/180)) * xSpeed; 소스를 보면
제가 제시한 공식에 의하면 님께서 쓰신 변수 xSpeed가 반지름 역할을 해버리는거죠