如何識別隨機生成的點落在地圖上的哪個區域?我已經在 stackoverflow 上發布了這個問題但被指向社區,因為它更有可能得到答案。 還有一張圖片表示我的問題需要什麼。
本質上,我有一個由幾個矩形區域組成的“地圖”。 我可以訪問每個矩形區域的所有頂點的坐標(它們的 x_min、x_max、y_min、y_max)。
我隨機生成一個位於該地圖上任意位置的點。 我知道那個點的坐標(x 和 y)。 我要解決的問題是找出該點所在的區域。
我所做的,只是通過一個大的條件語句來檢查點的 x & y 坐標是否在每個區域的 x_min 和 x_max 以及 y_min 和 y_max 之間。 但是,我覺得必須有一種更具可擴展性、可推廣性和效率的方法來做到這一點,但我找不到這樣做的方法,至少不是不同編程語言庫中沒有的方法。 我想可能會做一些事情,將地圖分成兩半,找出點在哪一半,計算那一半中的所有區域,檢查是否還剩下一個區域,如果沒有,再次將地圖分成兩半,然後再次經歷這個過程。 我只是不知道如何實施以及這是否可行或比我目前的方法更好。
腳本編寫視窗回复:如何確定隨機生成的點落在地圖上的哪個區域?如果我要為平鋪矩形區域發明一種算法,我會使用 KDTable 函數並將所有角點加載到表格中。 像這樣的東西:
一到四個矩形共享每個角
KDTable 將有效地告訴哪個角最接近任何查詢的 xy 位置。 如果您保留另一個包含共享該點的所有矩形的表格,則您最多只需要檢查四個。 根據您對數據的排序方式,只需知道
KDTable 在 K 維中幾乎完成了您所描述的工作。對於 xy 數據,K==2。
回复:如何確定隨機生成的點落在地圖上的哪個區域?或者也許更難。
這將找到錯誤的角落。
回复:如何確定隨機生成的點落在地圖上的哪個區域?你需要多少分辨率? 如果 10K x 10K 位圖就足夠了,並且多邊形少於 16E6,您可以將矩形繪製到具有唯一顏色的位圖中(2^24 種顏色是 1600 萬種顏色),並立即查詢一個圓形的 xy 像素。 我做了類似的事情ESP32 時鐘中的 JSL BLOB用於時區地圖中的 GPS 查找。 就我而言,我採用了我能得到的解決方案,即靠近時區邊界的一兩英里;我不需要像能夠對位圖進行運行長度編碼以使其適合小型計算機那樣的速度。
編輯:顯然我做了一個這麼大的位圖
composition = J( 16000, 30000, 0 );
如果我變大,要么內存不足,要么超過像素限制……我使用 16000 表示 +/- 90 度緯度,30K(不是 32K)表示 +/- 180 度經度。未壓縮超過 GB。 您需要一個 PNG 文件,而不是 JPG。 JPG 不會保留顏色。
回复:如何確定隨機生成的點落在地圖上的哪個區域?因為矩形似乎沒有旋轉並且沒有重疊:
四次檢查/循環並始終刪除那些不匹配的:
1. 檢查所有 x_min 小於點 x 的方塊
2.檢查所有左邊的方格,其中x_max大於點的x
3.檢查所有左邊的方格,其中y_min小於點的y
4.檢查所有左邊的方格,其中y_max大於點的y
如果只剩下一個方格,您可以在其中的任何一點停下來。 在 JMP 的情況下,您可以在 Loc() 的幫助下完成此操作。
或者然後循環遍歷所有方塊的最小值最大值並在您找到類似以下內容的匹配項時中斷:
:xmin < x < :xmax & :ymin < y < :ymax
幾個可能相關的鏈接,並有更好的可能解決方案:
https://stackoverflow.com/questions/1897779/test-if-point-is-in-some-rectangle
https://www.reddit.com/r/programming/comments/80dlc/i_have_a_set_of_rectangles_and_need_to_determine/