여기서 수학 오류가 발생하는 것 같습니다 ... 좌표 공간에서 (x, y) 점을 다른 좌표 공간으로 변환해야합니다 - 극지감이 아닙니다 데카르트 식 또는 어떤 종류의 것 ... 한 묶음에서 다른 묶음으로. 즉, 왼쪽 아래 (-100, -100)와 오른쪽 상단 (100,100)의 사각형에 해당하는 특정 (x, y)에 대해, 그 점이 왼쪽 하단에있는 사각형에서 어디에 위치하는지 알아야합니다 , 0) 및 오른쪽 위 (500, 500). 나는이 느낌좌표를 한 공간에서 다른 공간으로 변환
은 간단한 계산이다하지만 난
그것은 자바로 작성된 작은 컴퓨터 그래픽 프로그램입니다 ... 바로 그것을 점점 시간의 지옥을 보내고 있습니다. 본질적으로 변경되는 클립 윈도우가 있으며 클립 윈도우는 전체 뷰 윈도우를 채울 필요가 있습니다. 클립 및 뷰의 초기 값은 위의 직사각형에 의해 순서대로 지정됩니다. 그러나 클립은 예를 들어 왼쪽 아래 (-80, -65) 및 오른쪽 위 (75, 65)의 사각형으로 바뀔 수 있습니다. 그런 다음 해당 사각형 내에있는 지점을보기 창 (왼쪽 아래 (0,0), 오른쪽 상단 (500, 500)) 내에있는 지점으로 변환해야합니다.
다음은 내가 가지고있는 것입니다. 지금 :
public int normalizeX(float x) {
float clipWidth = clipRight - clipLeft;
int viewWidth = viewRight - viewLeft;
x += 100; //Get x into range [0, 200] instead of [-100, 100]
//First convert x to value within clip width, then "scale" to viewport width
return (int)(((clipWidth*x)/200) * (viewWidth/clipWidth));
}
public int normalizeY(float y) {
float clipHeight = clipTop - clipBottom;
int viewHeight = viewTop - viewBottom;
y += 100; //Get y into range [0, 200] instead of [-100, 100]
//First convert y to value within clip height, then "scale" to viewport height
return (int)(((clipHeight*y)/200) * (viewHeight/clipHeight));
}
어떤 도움을 주셔서 감사합니다!
하드 코딩 된 [[0, 200]'및 [-100,100]은 어디에서 왔습니까? –
Jean에게 알려 주셔서 감사합니다. James, 그 값은 (-100, -100), (100, 100)의 범위에서 정의 된 모든 모양 (관계없이 또는 클립 또는보기 창)에 기인합니다. – user1028885