推 anumis: 2萬的項目純判斷迴圈很快吧,應該不到1秒,你的程式碼方便 11/07 00:48
→ anumis: 貼出來嗎? 11/07 00:48
→ stupid0319: 改成C語言應該可以快一倍 11/07 01:04
for (int iY = 0; iY < iHeight; ++iY)
{
for (int iW = 0; iW < iWidth; ++iW)
{
mouseLocation.X = (float)iNodataX;
if (!range.IsVisible(mouseLocation))
{
dataArray[temp1 + iY * iWidth + iW] = Convert.ToDouble(null);
dataArray[temp2 + iY * iWidth + iW] = Convert.ToDouble(null);
dataArray[temp3 + iY * iWidth + iW] = Convert.ToDouble(null);
}
}
}
概略是上面 有經過測試,當iHeight 跟iWidth愈大的時候會愈慢
主要是慢在 range.IsVisible <-判斷座標是否在該範圍內
推 Laluth: 如果這是迴圈內全部的程式碼的話if判斷應該可以移到迴圈外 11/07 09:36
→ hrih: 用外積判斷就好了,給你關鍵字,射線法 11/07 14:38
感謝h大,後來google射線法後 確實以該法就解決了。
推 Litfal: 因為GraphicsPath.IsVisible比你想像中複雜,如果都是矩形 11/07 20:12
→ Litfal: 請用Rectangle.Contains 11/07 20:13
→ Litfal: 然後根本不需要掃整個矩形範圍檢查,只要跑四個迴圈設定 11/07 20:18
→ Litfal: 矩形範圍外的就好 11/07 20:18
回L大 很感謝您 其實原先就是3個(跟您4個是相同的意思)迴圈,
沒有全跑 不過也是很慢
您說的Rectangle.Contains 我會再找時間試看看,真的很感謝前輩^^
※ 編輯: AutoTea (111.253.79.212), 11/07/2017 23:22:42
推 bestman8556: 碰過這種類似問題,射線法解決+1 11/22 12:19