2012-06-16 82 views
1

可以說我在2d平面上的位置有一點。 這一點將隨機改變它的位置,但那不是重點,所以我們假設它有它自己的速度,並且它在有限的寬度和高度的平面上移動; 所以經過一段時間的運動後,這一點將達到平面邊界。 但它不允許離開飛機。在指定範圍內的持續值

所以,現在我可以檢查每個幀的點位置,看看它是否達到了約束。

如果(point.x> bound.xMax)point.x = bound.xMax

如果我想指向本身瞬間移動到平面的第二側我可以簡單地:

point.x =點.X%bound.xMax;

但我需要存儲整數的點位置。

對於我的corei7 1.6上的10個千分值,兩個解決方案 都有類似的時間。 41ms vs 47秒, ,所以在這種情況下使用模函數是沒有意義的,它的檢測速度更快。

但是,是否有任何一種技巧使其更快? 用於迭代數組方法的多個線程不是解決方案。

也許我可以將我的約束值擴展到一些奇怪的值,例如丟棄位置值的二進制解釋的一部分。

如果有一些伎倆要做,我認爲有人在我之前做過:) 你知道任何一種解決方案可以幫助我嗎?

+0

在浮點值中,你不能只是「丟棄」二進制表示中的某些位,因爲那樣你就會丟失一些重要的數字。 – Spo1ler

+0

爲什麼不簡單地使用'fmod()'來實現浮點模?我很肯定你不能在這樣的基本計算上進行更多的優化 – Spo1ler

回答

1

如果有某種方法可以在平面座標上添加信息,則可以很好地在平面周圍創建一個「邊界」,其中包含一個標識爲「超出邊界」的值。例如,如果您有10x10板,請將其設置爲12x12並使用2個額外的行和列來插入該信息。

現在你可以做的(僞代碼): IF點板「出邊界值的」 THEN 做你的事 END IF

注意,此方法只有當你點了優化x和y值(我對你的案例的假設)。