日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

森汉姆算法(AS3)-检测两点之间所经过的节点

發布時間:2023/12/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 森汉姆算法(AS3)-检测两点之间所经过的节点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為了把A*尋到的路徑中一些沒必要的節點去掉,可以用到森漢姆算法,如果兩點之間經過的節點都是可走的,那就把這兩個點連起來,最終拿到的路徑就是比較平滑的了。

下面是算法實現:

?

?
public static function bresenham(x1:int, y1:int, x2:int, y2:int):Array { ????var touched:Array = []; ????var steep:Boolean = Math.abs(y2 - y1) > Math.abs(x2 - x1); ????if (steep) ????{ ????????var tmp:int; ????????tmp = x1; ????????x1 = y1; ????????y1 = tmp; ????????tmp = x2; ????????x2 = y2; ????????y2 = tmp; ????} ????if (x1 > x2) ????{ ????????var x1_old:int = x1; ????????var y1_old:int = y1; ????????x1 = x2; ????????x2 = x1_old; ????????y1 = y2; ????????y2 = y1_old; ????} ????var deltax:int = x2 - x1; ????var deltay:int = Math.abs(y2 - y1); ????var error:int = deltax / 2; ????var ystep:int; ????var y:int = y1; ????if (y1 < y2) ????{ ????????ystep = 1; ????} ????else ????{ ????????ystep = -1; ????} ????for (var x:int = x1; x <= x2; ++x) ????{ ????????if (steep) ????????{ ????????????touched.push(new Point(y, x)); ????????} ????????else ????????{ ????????????touched.push(new Point(x, y)); ????????} ????????error = error - deltay; ????????if (error < 0) ????????{ ????????????y = y + ystep; ????????????error = error + deltax; ????????} ????} ????? ????return touched; }

?

一些資料:http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm

轉載于:https://www.cnblogs.com/bluesea-flash/p/3319366.html

總結

以上是生活随笔為你收集整理的森汉姆算法(AS3)-检测两点之间所经过的节点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。