NCF参数化建筑论坛
标题:
<分享>嘗試在GH 裡用使用C#找出最短的路徑
[打印本页]
作者:
weiwei
时间:
2013-2-21 21:55
标题:
<分享>嘗試在GH 裡用使用C#找出最短的路徑
本帖最后由 weiwei 于 2013-2-21 23:28 编辑
目標 : 嘗試在GH 裡用使用C#找出最短的路徑。
blog :
http://lochengwei.blogspot.com/2013/02/gh-c_21.html
流程步驟 :
1.散佈隨機點在範圍內,設index 0 為起始點。
使用舊點雲(intput x)計算出基準點(basePoint)與新點雲(calNewCloudPts2)。
新點雲中不包含基準點(basePoint)。
public List<Point3d> calNewCloudPts(int basePtIndex, List<Point3d> oldCloudPts){...}
2. 使用基準點(basePoint)與新點雲(calNewCloudPts2)搜尋最近點,並連線找到最近點(calNewCloudPts2[closePtIndex])。
public int calculateDist(List < Point3d > calPts, Point3d startPt){...}
3. 使用基準點(basePoint)與最近點(calNewCloudPts2[closePtIndex])相連線。
public Line LinkLn(Point3d startPt, Point3d endPt){...}
4. 更新基準點(basePoint)與最近點(calNewCloudPts2[closePtIndex])。
initialnum = closePtIndex;
x = calNewCloudPts2;
5.重複1-3步驟,完成最近距離連線
main code:
List < Line > mylnList = new List < Line >();
List<Point3d> calNewCloudPts2 = new List<Point3d>();
Point3d basePoint = new Point3d();
int closePtIndex = 0;
//the initial index is 0
int initialnum = 0;
Print("x List = {0}", x.Count.ToString());
int totaloldPtsLength = x.Count - 1;
for(int i = 0;i < totaloldPtsLength;i++){
basePoint = x[initialnum];
calNewCloudPts2 = calNewCloudPts(initialnum, x);
closePtIndex = calculateDist(calNewCloudPts2, basePoint);
mylnList.Add(LinkLn(basePoint, calNewCloudPts2[closePtIndex]));
initialnum = closePtIndex;
x = calNewCloudPts2;
Print("calNewCloudPts2 List = {0}", calNewCloudPts2.Count.ToString());
}
//Print("x count = {0}", x.Count.ToString());
A = mylnList;
流程圖片:
[attach]37701[/attach]
[attach]37700[/attach]
[attach]37702[/attach]
檔案位子:
[attach]37703[/attach]
作者:
weiwei
时间:
2013-2-21 23:53
把2D隨機點改成3D點雲也可以使用。
作者:
freeze23
时间:
2013-2-25 18:43
支持一下~~
作者:
freeze23
时间:
2013-2-25 18:57
是否可以再尝试一下 点群中寻找总长最短的路径?
作者:
king_tc
时间:
2013-2-26 10:29
楼主这样的逻辑仅仅能保证每个点和下一个点距离最短,但是不知道是否可以像楼上说的那样,求得总长最短的路径尝试一下?期待
作者:
weiwei
时间:
2013-2-26 21:19
這部分我可以試看看,已經有找出最短路徑的演算法,但是需要在轉譯一下。
欢迎光临 NCF参数化建筑论坛 (http://bbs.ncf-china.com/)
Powered by Discuz! X3.2