中级农民
- 积分
- 101
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2017-4-27
- 最后登录
- 1970-1-1
|
大致的code如下, 用左下和右上的两个点,四个值表示一个矩阵, (x1, y1, x2, y2)- <div>
- </div><div><div>def randomPoint(recs):</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>n = len(recs)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>area_array = [0 for i in xrange(n+1)]</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>for i in xrange(1, n+1):</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>area_array[i] = area_array[i-1] + (recs[i][2]-recs[i][0])*(recs[i][3]-recs[i][1])</div><div>
- </div><div><span class="Apple-tab-span" style="white-space:pre"> </span>sum_area = array_array[n]</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>random_area = random.randint(0, sum_area)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>rec_index = binarySearch(random_area, area_array) - 1 </div><div><span class="Apple-tab-span" style="white-space:pre"> </span>random_point = getRandomPoint(recs[rec_index])</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>return random_point</div><div>
- </div><div>def binarySearch(target, array):</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>start=0; end=len(array)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>while start+1<end:</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>mid = start+(end-start)/2</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>if array[mid]<target:</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>start=mid</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>else:</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>end=mid</div><div>
- </div><div><span class="Apple-tab-span" style="white-space:pre"> </span>if array[end]<target:</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>return end</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>if array[start]<target:</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>return start</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>return 1</div><div>
- </div><div>def getRandomPoint(rec):</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>(x1, y1, x2, y2) = rec</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>x = random.randint(x1,x2)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>y = random.randint(y1, y2)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>return (x, y)</div></div>
复制代码 |
|