これはCにあります。
同じ空間をサンプリングする 2 つの 2D 配列 ArrayA と ArrayB があります。B は ArrayA とは異なる属性をサンプリングする頻度が ArrayA よりも低いため、A よりも小さくなります。
いくつかの変数を定義してみます。
ArrayA と ArrayB は、配列の先頭へのポインタです。最初に X の行が格納され、次に Y がインクリメントされ、X の次の行が格納されます (Y=1)。
そのため、指定された indexA から indexB を設定して、indexA の値に関連付ける最近傍サンプルにする必要があります。
ここに私がいます (エラーがあれば修正してください! インデックス 0 から開始していることに注意してください): indexA = 0 posB 0,0; インデックスB = 0
posA 8,0; indexA = 8 (最初の行の終わり) posB 2,0; インデックス B = 2
posA 0,1; indexA = 9 posB 0,0; indexB = 0 (まだ底点に近い)
posA 0,3; indexA = 27 posB 0,1; インデックスB = 3
posA 8,8; indexA = 80 (最後のポイント) posB 2,2; インデックス B = 8
これまでのところ、indexA = posAX + (posAY * SizeAX) があります。
私が試したこと (そしてもちろん失敗しました): indexB = (int) (indexA * (SizeBX * SizeBY / (SizeAX * SizeAY)) + 0.5) // 最初の行と最後の値に対してのみ機能するように見えます..しかしこれは明らかに機能しません - しかし、2つをどのように正確にマッピングするかについては興味がありますが、修正後に調べます..
posAY や posAX にはアクセスできず、indexA だけでしたが、mod と剰余を使用して分解できるはずですよね? または、より効率的なより高速な方法はありますか?あ
私もこれを試しました:
indexB = (posAY * SizeBY / SizeAY) * SizeBY + (posAX * SizeBX / SizeAX)
問題は、X インデックスと Y インデックスを別々に丸め、その後 SizeBX と SizeBY を使用する必要があることだと思いますか?
追加の注意点として、ArrayA と ArrayB は、どちらもより大きな空間をサンプリングするより大きなデータ セットから取得されます。四角形は任意であるため、ArrayA または ArrayB のいずれかが四角形の境界に最も近い点を持つ可能性があり、最も近い隣人が実際にグラブしている方法に関する他の問題につながります。これに対処する方法についてもわかりません。