想象一下,在2D屏幕上顯示一個美式橄欖球場。該場地每十碼有一個標記。每個標記只是一個跨越場地高度的垂直線。說有人給你一個(x,y)場地。 如何在不使用循環的情況下確定最接近(x,y)位置的垂直標記?2D網格上的基本數學運算
目前我使用一個簡單的循環是這樣的:
// want marker closest to x
float x = randomFloat();
double minDistance = Double.MaxValue;
Marker closestMarker = null;
foreach (Marker m in markers) {
double d = ABS(x - m.x);
if (d < minDistance) {
minDistance = d;
closestMarker = m;
}
}
我喜歡這種感覺,而不檢查每個標記,因爲標記是均勻分佈的,我們知道總的標記計數來完成。不過我畫一個空白,當涉及到必要的分工等
您可以從x,y位置開始繪製一個不斷擴大的圓,並在第一個交點處停留一個標記。無論哪種方式,你都需要一個循環,但它比檢查每一個標記要短。也許你可以使用這樣一個事實,即標記是均勻間隔的......我會想一想 – GarethL