• R/O
  • SSH
  • HTTPS

marathon: コミット


コミットメタ情報

リビジョン304 (tree)
日時2007-06-01 21:09:31
作者hogepiyo

ログメッセージ

*** empty log message ***

変更サマリ

差分

--- marathon/trunk/HPLLib/HPLMapTool.cpp (revision 303)
+++ marathon/trunk/HPLLib/HPLMapTool.cpp (revision 304)
@@ -378,26 +378,23 @@
378378 int max = (int)LineList.size();
379379 //線への垂線の距離順で整列する
380380 //全部の線への垂線を求める
381- double *length = new double[max];
382-
381+ struct hpl::math::qsort::Pair<double>* pairs = new struct hpl::math::qsort::Pair<double>[max];
383382 for(int i = 0; i < max; i ++){
384383 line_data* line = get_line_data(i);
385384 endpoint_data* epStart = get_endpoint_data(line->endpoint_indexes[0]);
386385 endpoint_data* epEnd = get_endpoint_data(line->endpoint_indexes[1]);
387- length[i] = hpl::math::getPointDistanceFromLine(wpoint.x, wpoint.y,
386+ pairs[i].data = hpl::math::getPointDistanceFromLine(wpoint.x, wpoint.y,
388387 epStart->vertex.x, epStart->vertex.y, epEnd->vertex.x, epEnd->vertex.y);
389388 }
390- struct hpl::math::qsort::Pair* pairs = new struct hpl::math::qsort::Pair[max];
391- hpl::math::qsort::quickSort(pairs, max);
389+ hpl::math::qsort::quickSort<double>(pairs, max);
392390
393391 //近くにある線から見ていく
394392 for(int i = 0; i < max; i ++){
395-
393+ line_data* startLine = get_line_data(pairs[i].index);
396394 }
397395
398396 //解放
399- delete sortedIndex;
400- delete length;
397+ delete pairs;
401398 return polyDatas;
402399 }
403400
@@ -600,3 +597,28 @@
600597 b2->vertex.x, b2->vertex.y);
601598 return rad;
602599 }
600+
601+/**
602+ 指定した点がポリゴンの中に存在するかどうかを確かめます
603+ @
604+*/
605+bool hpl::aleph::map::isPointInPolygon(int viewPX, int viewPY, int polygonIndex,
606+ int offsetXWorld, int offsetYWorld, int zoomDivision, int offsetx, int offsety)
607+{
608+ //ワールド座標に変換します
609+ world_point2d wpoint = hpl::aleph::map::getWorldPoint2DFromViewPoint(viewPX, viewPY,
610+ offsetXWorld, offsetYWorld, zoomDivision, offsetx, offsety);
611+ double points[MAXIMUM_VERTICES_PER_POLYGON][2];
612+ //ポリゴン情報を得ます
613+ polygon_data* poly = get_polygon_data(polygonIndex);
614+ int n = poly->vertex_count;
615+ for(int i = 0; i < n; i ++){
616+ endpoint_data* ep = get_endpoint_data(poly->endpoint_indexes[i]);
617+ points[i][0] = ep->vertex.x;
618+ points[i][1] = ep->vertex.y;
619+ }
620+ //位置検査します
621+ bool isPointIn = hpl::math::isPointInPolygon(wpoint.x, wpoint.y, points, n);
622+ return isPointIn;
623+}
624+
--- marathon/trunk/HPLLib/HPLMapTool.h (revision 303)
+++ marathon/trunk/HPLLib/HPLMapTool.h (revision 304)
@@ -221,6 +221,13 @@
221221
222222 */
223223 //void setupPolygon(int index);
224+
225+ /**
226+ 指定した点がポリゴンの中に存在するかどうかを確かめます
227+ @
228+ */
229+ bool isPointInPolygon(int viewPX, int viewPY, int polygonIndex,
230+ int offsetXWorld, int offsetYWorld, int zoomDivision, int offsetx, int offsety);
224231 };
225232 };
226233 };
--- marathon/trunk/HPLLib/HPLQuickSort.cpp (revision 303)
+++ marathon/trunk/HPLLib/HPLQuickSort.cpp (revision 304)
@@ -16,11 +16,11 @@
1616 {
1717 int left = start, right = end;
1818 while( left <= right){
19- while(left <= end && dataArray[left] < axis)left ++;
20- while(right >= start && dataArray[right] >= axis)right --;
19+ while(left <= end && dataArray[left].data < axis)left ++;
20+ while(right >= start && dataArray[right].data >= axis)right --;
2121 if(left > right)break;
2222 //交換
23- hpl::math::exchange<struct hpl::math::qsort::Pair<T>>(&dataArray[left], &dataArray[right]);
23+ hpl::math::exchange<struct hpl::math::qsort::Pair<T> >(&dataArray[left], &dataArray[right]);
2424 }
2525 return left;
2626 }
@@ -37,11 +37,11 @@
3737 int pivot(struct hpl::math::qsort::Pair<T> *dataArray, int start, int end)
3838 {
3939 int k = start + 1;
40- while( k <= end && dataArray[start] == dataArray[k])k ++;
40+ while( k <= end && dataArray[start].data == dataArray[k].data)k ++;
4141 //all are same
4242 if(k > end) return -1;
4343 //if not
44- if(dataArray[start] >= dataArray[k]){
44+ if(dataArray[start].data >= dataArray[k].data){
4545 return start;
4646 }else{
4747 return k;
@@ -59,11 +59,11 @@
5959 if( start == end){
6060 return;
6161 }
62- int p = pivot(dataArray, start, end, destIndexes);
62+ int p = pivot(dataArray, start, end);
6363 if(p != -1){
64- int offset = partition(dataArray, start, end, dataArray[p]);
65- repeatbleQuickSort(dataArray, start, offset - 1, destIndexes);
66- repeatbleQuickSort(dataArray, offset, end, destIndexes);
64+ int offset = partition(dataArray, start, end, dataArray[p].data);
65+ repeatbleQuickSort(dataArray, start, offset - 1);
66+ repeatbleQuickSort(dataArray, offset, end);
6767 }
6868 }
6969
@@ -75,13 +75,16 @@
7575 void hpl::math::qsort::quickSort(struct hpl::math::qsort::Pair<T> *dataArray, int max)
7676 {
7777 if(max == 1){
78- destIndexes[0] = (T)0;
78+ dataArray[0].index = 0;
7979 }else{
8080 //init indexes
8181 for(int i = 0; i < max; i ++){
82- destIndexes[i] = i;
82+ dataArray[i].index = i;
8383 }
8484 //sort it
8585 repeatbleQuickSort(dataArray, 0, max);
8686 }
8787 }
88+
89+template void hpl::math::qsort::quickSort(struct hpl::math::qsort::Pair<int> *dataArray, int max);
90+template void hpl::math::qsort::quickSort(struct hpl::math::qsort::Pair<double> *dataArray, int max);
旧リポジトリブラウザで表示