나는 새로운 시각을 필요로하는 2D 측면 뷰어를 가지고있다. 저는 현재 목표에 대해 연구 중이며 부분적으로 작동합니다 : 총구 속도가 알려져 있고, 중력이 알려져 있고 목표물까지의 거리가 알려져 있습니다. 여기 SE와 위키 피 디아에 다양한 소스를 모두 사용하여, 나는 발사체 속도 시작 벡터를 계산하기 위해 다음과 같은 방법을 마련했습니다방향에 상관없이 Math.atan()이 다시 작동하도록 다시 작성하기
public Vector2 calculateAim(Vector2 pos, Unit target) {
// Check if previous calculation can be recycled
if (target.equals(lastTarget))
return lastAim.cpy();
lastTarget = target;
double v = RifleBullet.projectileSpeed; // Muzzle velocity
double g = Settings.gravity.y; // Gravity, positive value
double x = offset.x; // x distance to target. Negative if towards left
double y = offset.y; // y distance to target. Negative if lower
double theta = Math.atan(((v * v) - Math.sqrt((v*v*v*v) - (g*(g*(x*x) + 2*y*(v*v)))))/(g * x));
Vector2 aim = new Vector2(-(float)Math.cos(theta), (float)Math.sin(theta));
aim.nor();
aim.scl((float)RifleBullet.projectileSpeed);
lastAim = aim.cpy();
return aim;
}
위가 부분적으로 작동합니다 맨 오른쪽 사람이 제대로 목표로합니다. 그러나 왼쪽에 서있는 사람은 계속 잘못된 방향으로 발사합니다. Y 구성 요소가 올바르지 만 X 구성 요소가 아주 간단하게 반전 된 것처럼 보입니다. 나는 세타 계산 한 후이를 추가하는 경우 :
if (side.contains("left"))
angleInRadians += Math.PI;
... 제대로 둘 불을하지만, 전장에 대한 자세한 단위가있을 것 같은 장기적으로 실행 가능하지, 그리고 내가 할 때 문제를 일으킬 될거에요 그 시점까지.
저는 삼각법 계산의 가상 삼각형이 어떻게 움직이는지를 확인할 필요가 없으므로 문제의 원인은 Math.atan()
일 수 있다고 생각합니다.
왼쪽/오른쪽/위/아래에 관계없이 제대로 작동하도록 메소드를 조정해야합니까?
atan2에 읽기. – Tenfour04