마우스/스크린 좌표를 등각 투상 인덱스로 변환하는 데 어려움을 겪고 있습니다. 나는 여기 또는 인터넷에서 찾을 수있는 모든 공식을 시도했지만 그 중 아무 것도 작동하지 않거나 뭔가를 놓치고 있습니다. http://i.imgur.com/HnKpYmG.png 다음 그림은 원점이 왼쪽 상단에 있고 한 타일의 크기가 128x64 픽셀입니다.등각 투영 좌표로의 화면 좌표
감사합니다. 감사합니다.
마우스/스크린 좌표를 등각 투상 인덱스로 변환하는 데 어려움을 겪고 있습니다. 나는 여기 또는 인터넷에서 찾을 수있는 모든 공식을 시도했지만 그 중 아무 것도 작동하지 않거나 뭔가를 놓치고 있습니다. http://i.imgur.com/HnKpYmG.png 다음 그림은 원점이 왼쪽 상단에 있고 한 타일의 크기가 128x64 픽셀입니다.등각 투영 좌표로의 화면 좌표
감사합니다. 감사합니다.
기본적으로 몇 가지 다른 비트가있는 회전 행렬을 적용해야합니다.
END {
PI = 3.1415;
x = 878.0;
y = 158.0;
# Translate one origin to the other
x1 = x - 128*5;
# Stretch the height so that it's the same as the width in the isometric
# This makes the rotation easier
# Invert the sign because y is upwards in math but downwards in graphics
y1 = y * -2;
# Apply a counter-clockwise rotation of 45 degrees
xr = cos(PI/4)*x1 - sin(PI/4)*y1;
yr = sin(PI/4)*x1 + cos(PI/4)*y1;
# The side of each isometric tile (which is now a square after the stretch)
diag = 64 * sqrt(2);
# Calculate which tile the coordinate belongs to
x2 = int(xr/diag);
# Don't forget to invert the sign again
y2 = int(yr * -1/diag);
# See the final result
print x2, y2;
}
내가 몇 가지 다른 좌표를 테스트하고 결과가 올 것 : 여기에 다른 언어에 포트에 쉽게해야 AWK로 작성된 몇 가지 예제 코드입니다.
나는 acfrancis로 해답을 시도했는데, 음수 인덱스에 대해서는 함수의 한계가 있다는 것을 알았습니다. 누군가 다른 사람이이 문제를 해결할 경우를 대비해서 : 발행 사유 : -1.1 ....과 같은 음수 값은 -1 대신 0으로 변환됩니다. 배열에 대한 고전적인 "유일한 영"문제가 있습니다.
것은 해결하기 : (X2)를 주조하기 전에, Y2 값을 int로 : 체크 XR/DIAG < 0, 진정한 결과 = 결과 만약 있다면 - 1 (각각 Y2를 들어 연간 * -1/DIAG < 0 then result = result -1) 그런 다음 이전과 같이 결과 값을 int로 캐스트합니다.
희망이 있습니다.
덧붙여서 : 128 * 5로 원점을 번역 한 것은 특정한 경우에 해당하므로이 기능을 일반화하기 위해 제거해야한다고 생각합니다.
완벽하게 작동 해 주셔서 감사합니다. – Hnus
위대한 분들은 만족 스럽다면 대답을 수락하는 것을 잊지 마십시오. – acfrancis
노골적인 코멘트. PI를위한 소수점 네 번째 자리는 실제로 중요하지 않지만, 당신은 그것을 올바르게 가져야합니다 : 3.14159 ... 3.1416으로 반올림합니다. –