Python 點(diǎn)集排序之帶索引的Z字形排序算法實(shí)現(xiàn)代碼
Grasshopper Python點(diǎn)集排序:帶索引的Z字形排序算法

1. 功能介紹
這段代碼實(shí)現(xiàn)了一個(gè)在Grasshopper中的點(diǎn)集排序功能,不僅可以將空間中的點(diǎn)按照Y坐標(biāo)分組并在每組內(nèi)按X坐標(biāo)排序,還能追蹤每個(gè)點(diǎn)的原始索引位置。
2. 輸入輸出參數(shù)
- 輸入?yún)?shù):
- x: 待排序的點(diǎn)集(Point List)
- t: 容差值(Number),默認(rèn)2000
- 輸出參數(shù):
- a: 排序后的點(diǎn)集(Point List)
- i: 排序后點(diǎn)的原始索引(Number List)
3. 核心算法流程

4. 代碼解析
4.1 點(diǎn)索引對(duì)的創(chuàng)建和處理
points_with_index = list(enumerate(x))
- 使用
enumerate()創(chuàng)建(索引, 點(diǎn))對(duì) - 將每個(gè)點(diǎn)與其原始位置綁定
4.2 分組函數(shù)
def groupPointsByY(points_with_index, tolerance):
points_with_index = sorted(points_with_index, key=lambda pair: pair[1].Y)
groups = []
current_group = [points_with_index[0]]
current_y = points_with_index[0][1].Y- 函數(shù)接收點(diǎn)索引對(duì)和容差值
- 使用lambda函數(shù)訪問(wèn)點(diǎn)的Y坐標(biāo)進(jìn)行排序
- pair[1]訪問(wèn)點(diǎn)對(duì)象,pair[0]訪問(wèn)索引
4.3 分組邏輯
for p in points_with_index[1:]:
if abs(p[1].Y - current_y) <= tolerance:
current_group.append(p)
else:
groups.append(current_group)
current_group = [p]
current_y = p[1].Y- 遍歷點(diǎn)索引對(duì)
- 基于Y坐標(biāo)差值分組
- 保持索引與點(diǎn)的關(guān)聯(lián)
4.4 排序和結(jié)果提取
for group in grouped_points:
group_sorted = sorted(group, key=lambda pair: pair[1].X)
for index, point in group_sorted:
sorted_points.append(point)
sorted_indices.append(index)- 組內(nèi)按X坐標(biāo)排序
- 分別提取點(diǎn)和索引
- 維護(hù)排序后的兩個(gè)列表
5. Python語(yǔ)法要點(diǎn)
5.1 元組拆包
for index, point in group_sorted:
- 直接將元組拆分為兩個(gè)變量
- 簡(jiǎn)化數(shù)據(jù)訪問(wèn)
5.2 Lambda表達(dá)式
key=lambda pair: pair[1].X
- 用于定義排序鍵函數(shù)
- 訪問(wèn)元組中點(diǎn)對(duì)象的坐標(biāo)
5.3 列表操作
sorted_points.append(point) sorted_indices.append(index)
- 使用append()逐個(gè)添加元素
- 維護(hù)兩個(gè)平行列表
6. 數(shù)據(jù)結(jié)構(gòu)
6.1 點(diǎn)索引對(duì)
(index, point) 結(jié)構(gòu): - index: 原始位置 - point: 點(diǎn)對(duì)象 - X: X坐標(biāo) - Y: Y坐標(biāo) - Z: Z坐標(biāo)
6.2 分組結(jié)構(gòu)
groups = [
[(index1, point1), (index2, point2), ...], # 第一組
[(index3, point3), (index4, point4), ...], # 第二組
...
]到此這篇關(guān)于Python 點(diǎn)集排序之帶索引的Z字形排序算法的文章就介紹到這了,更多相關(guān)Python Z字形排序算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python爬蟲(chóng)獲取國(guó)外大橋排行榜數(shù)據(jù)清單
這篇文章主要介紹了Python爬蟲(chóng)獲取國(guó)外大橋排行榜數(shù)據(jù)清單,文章通過(guò)PyQuery?解析框架展開(kāi)全文詳細(xì)內(nèi)容,需要的小伙伴可以參考一下2022-05-05
Python3實(shí)現(xiàn)監(jiān)控新型冠狀病毒肺炎疫情的示例代碼
這篇文章主要介紹了Python3實(shí)現(xiàn)監(jiān)控新型冠狀病毒肺炎疫情的示例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
Python解析網(wǎng)頁(yè)源代碼中的115網(wǎng)盤(pán)鏈接實(shí)例
這篇文章主要介紹了Python解析網(wǎng)頁(yè)源代碼中的115網(wǎng)盤(pán)鏈接實(shí)例,主要采用了正則表達(dá)式re模塊來(lái)實(shí)現(xiàn)該功能,需要的朋友可以參考下2014-09-09
Django中使用 Closure Table 儲(chǔ)存無(wú)限分級(jí)數(shù)據(jù)
對(duì)于數(shù)據(jù)量大的情況(比如用戶(hù)之間有邀請(qǐng)鏈,有點(diǎn)三級(jí)分銷(xiāo)的意思),就要用到 closure table 的結(jié)構(gòu)來(lái)進(jìn)行存儲(chǔ)。這篇文章主要介紹了Django中使用 Closure Table 儲(chǔ)存無(wú)限分級(jí)數(shù)據(jù),需要的朋友可以參考下2019-06-06
python使用pycharm環(huán)境調(diào)用opencv庫(kù)
這篇文章主要介紹了python使用pycharm環(huán)境調(diào)用opencv庫(kù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
Python利用臨時(shí)文件實(shí)現(xiàn)數(shù)據(jù)的保存
tempfile模塊專(zhuān)門(mén)用于創(chuàng)建臨時(shí)文件和臨時(shí)目錄,它既可以在?UNIX?平臺(tái)上運(yùn)行良好,也可以在?Windows?平臺(tái)上運(yùn)行良好。本文將利用tempfile模塊創(chuàng)建臨時(shí)文件來(lái)保存數(shù)據(jù),感興趣的可以了解一下2022-07-07
基于python調(diào)用psutil模塊過(guò)程解析
這篇文章主要介紹了基于python調(diào)用psutils模塊過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
使用Python實(shí)現(xiàn)為PDF文檔設(shè)置背景色或背景圖
PDF作為一種跨平臺(tái)、高保真的文件格式被廣泛應(yīng)用,這篇文章主要為大家詳細(xì)介紹了如何使用Python代碼對(duì)PDF文檔進(jìn)行頁(yè)面背景色或背景圖片的設(shè)置,需要的可以參考下2024-04-04

