私はここでちょっとした数学の失敗をしているようです... (x,y) 点をある座標空間から別の座標空間に変換する必要があります-極座標からデカルト座標などの意味ではありません...ただある束縛から別の束縛へ。つまり、特定の (x,y) が左下 (-100, -100) と右上 (100,100) の長方形に収まる場合、その点が左下 (0 ,0) と右上 (500, 500)。
これは単純な数学のように感じますが、正しく理解するのにかなりの時間を費やしています...
これは、Java で書かれた小さなコンピュータ グラフィックス プログラム用です。基本的に、変化するクリップ ウィンドウがあり、そのクリップ ウィンドウはビュー ウィンドウ全体を占める必要があります。クリップとビューの初期値は、上記の長方形によってこの順序で指定されます。ただし、クリップは、たとえば、左下 (-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));
}
助けてくれてありがとう!