摘要:點(diǎn)集是下文所述的無(wú)向圖矢量場(chǎng)以及網(wǎng)格的實(shí)體。將視為語(yǔ)言中的行列的二維數(shù)組可能會(huì)更好理解一些。打開(kāi),將修改為上述修改,意味著將相機(jī)沿軸正方向移動(dòng)了個(gè)單位,即讓相機(jī)重復(fù)靠近。矢量場(chǎng)文件的格式與點(diǎn)集文件相同。
簡(jiǎn)介
Hamal 是一份 Python 3 腳本,可將點(diǎn)集、無(wú)向圖、曲線、矢量場(chǎng)、網(wǎng)格曲面等三維幾何數(shù)據(jù)轉(zhuǎn)化為 POV-Ray 場(chǎng)景文件。也就是說(shuō),Hamal 不生產(chǎn)數(shù)據(jù),也不負(fù)責(zé)圖形渲染,它只能算是一個(gè)數(shù)據(jù)格式轉(zhuǎn)換器,面向?qū)?POV-Ray 有一些了解并且希望使用 POV-Ray 對(duì)上述三維幾何圖形進(jìn)行光線追蹤渲染的人。
安裝$ git clone https://github.com/liyanrui/hamal.git $ cd hamal $ chmod +x hamal $ sudo install hamal /usr/local/bin點(diǎn)集
待渲染的三維點(diǎn)集數(shù)據(jù)應(yīng)當(dāng)存儲(chǔ)在 ASCII 編碼的文本文件中,并且文件的每一行文本都是三維點(diǎn)坐標(biāo)的字面值,例如:
1.2 3.3 5.4 0.1 2.2 8.5 ... ... ...
現(xiàn)在假設(shè)三維點(diǎn)集數(shù)據(jù)文件為 foo.asc,通過(guò)以下命令可將其轉(zhuǎn)換為 POV-Ray 場(chǎng)景文件 foo.pov 與 foo.inc:
$ hamal foo.asc
這條命令會(huì)在當(dāng)前目錄生成 foo.pov 與 foo.inc,前者為視圖文件,后者為 POV-Ray 模型文件,使用 povray 命令可基于 foo.pov 與 foo.inc 對(duì)點(diǎn)集進(jìn)行渲染:
$ povray foo.pov
渲染結(jié)果為當(dāng)前目錄下的位圖文件 foo.png。例如:
Hamal 默認(rèn)的點(diǎn)的尺寸是 0.0025,下面這條命令可將其設(shè)置為 0.005:
$ hamal --point-size=0.005 foo.asc
再次使用 povray 處理新生成的 foo.png,結(jié)果可得:
注:事實(shí)上,當(dāng)點(diǎn)的尺寸設(shè)為 x 時(shí),點(diǎn)在 POV-Ray 中的實(shí)際尺寸是 x * r,r 為點(diǎn)集近似最小外接球的半徑。
點(diǎn)集是下文所述的無(wú)向圖、矢量場(chǎng)以及網(wǎng)格的「實(shí)體」。
無(wú)向圖對(duì)于點(diǎn)集數(shù)據(jù)文件 foo.asc,假設(shè)我們算出了它對(duì)應(yīng)點(diǎn)集的歐幾里得最小支撐樹(shù)(EMST)——EMST 是樹(shù),也是無(wú)向圖。假設(shè) EMST 的數(shù)據(jù)被保存到 foo-graph.asc 文件,該文件的每一行都是 EMST 的一條邊的兩個(gè)端點(diǎn),只不過(guò)存儲(chǔ)的不是點(diǎn)坐標(biāo),而是 foo.asc 文件中對(duì)應(yīng)點(diǎn)坐標(biāo)的行號(hào),只不過(guò) foo.asc 第一行的行號(hào)從 0 開(kāi)始。將 foo.asc 視為 C 語(yǔ)言中的 n 行 3 列的二維數(shù)組可能會(huì)更好理解一些。例如:
0 1 1 15677 15677 12881 12881 12849 ... ...
要繪制無(wú)向圖,在將無(wú)向圖數(shù)據(jù)轉(zhuǎn)換為 POV-Ray 的過(guò)程中,需要載入點(diǎn)集數(shù)據(jù)文件與無(wú)向圖數(shù)據(jù)文件:
$ hamal --graph=foo-graph.asc foo.asc
然后使用 povray 對(duì)新的 foo.pov 進(jìn)行處理,便可得到 EMST 的渲染結(jié)果:
結(jié)果似乎與上文所示的點(diǎn)集模型的渲染結(jié)果差不多,這實(shí)際上是因?yàn)辄c(diǎn)集非常密集所致。若修改 foo.pov,讓相機(jī)距離點(diǎn)集更近一些,便可以看清 EMST 的局部分支。
打開(kāi) foo.pov,將
camera { location <0, 0, -2 * model_radius> + model_center * z look_at <0, 0, 0> translate view_center }
修改為:
camera { location model_center * z look_at <0, 0, 0> translate view_center }
上述修改,意味著將相機(jī)沿 z 軸正方向移動(dòng)了 2 * model_radius 個(gè)單位,即讓相機(jī)重復(fù)靠近 EMST。重新用 povray 處理 foo.pov,可得:
點(diǎn)的尺寸與先的寬度似乎太大了一些,可以將它們?cè)O(shè)置的小一些,可以在使用 hamal 生成 POV-Ray 場(chǎng)景文件時(shí)將它們的尺寸設(shè)置的小一些,例如:
$ hamal --graph=foo-graph.asc --point-size=0.001 --line-width=0.0005 foo.asc
結(jié)果可得:
曲線將一條曲線離散化處理,形成一組首尾相連的線段,這樣就可以構(gòu)成無(wú)向圖,然后利用上一節(jié)渲染無(wú)向圖的方法進(jìn)行曲線的渲染。
下圖是一條 3 次 Bezier 曲線的渲染結(jié)果:
矢量場(chǎng)矢量場(chǎng),就是一組矢量,這組矢量的起點(diǎn)即上文所述的點(diǎn)集文件,例如 foo.asc,而它們的終點(diǎn)存儲(chǔ)在矢量場(chǎng)文件中,例如 foo-vector-field.asc。矢量場(chǎng)文件的格式與點(diǎn)集文件相同。
下面的命令可以將矢量場(chǎng)轉(zhuǎn)化為 POV-Ray 場(chǎng)景文件:
$ hamal --vector-field=foo-vector-field.asc --point-size=0.001 --line-width=0.0005 foo.asc
像上一節(jié)那樣修改 foo.pov 文件,拉近相機(jī)與模型之間的距離,結(jié)果可得:
網(wǎng)格為了便于演示,下面的命令使用了 qhull 為一組隨機(jī)點(diǎn)集構(gòu)建了凸包,然后將凸包數(shù)據(jù)(三角網(wǎng)格文件)轉(zhuǎn)換為 POV-Ray 場(chǎng)景文件并交由 povray 進(jìn)行渲染:
$ rbox 100 W0 > points.asc $ qhull QJ i < points.asc TO hull.asc $ sed -i "1,2d" points.asc $ sed -i "1d" hull.asc $ hamal --object=hull --mesh=hull.asc --point-size=0.03 points.asc $ povray +P hull.pov
hamal 的 --object 選項(xiàng)用于設(shè)定 POV-Ray 模型的文件名(不包含擴(kuò)展名)。
結(jié)果可得到如下圖所示的渲染結(jié)果:
內(nèi)幕見(jiàn)「Python 邂逅 POV-Ray」與「趴邊去!」。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/41024.html
摘要:相當(dāng)于分布式數(shù)據(jù)庫(kù)的大腦,一方面負(fù)責(zé)收集和維護(hù)數(shù)據(jù)在各個(gè)節(jié)點(diǎn)的分布情況,另一方面承擔(dān)調(diào)度器的角色,根據(jù)數(shù)據(jù)分布狀況以及各個(gè)存儲(chǔ)節(jié)點(diǎn)的負(fù)載來(lái)采取合適的調(diào)度策略,維持整個(gè)系統(tǒng)的平衡與穩(wěn)定。原文鏈接雷神自動(dòng)化運(yùn)維平臺(tái) 作者:瞿鍇,同程藝龍資深 DBA 背景介紹 隨著互聯(lián)網(wǎng)的飛速發(fā)展,業(yè)務(wù)量可能在短短的時(shí)間內(nèi)爆發(fā)式地增長(zhǎng),對(duì)應(yīng)的數(shù)據(jù)量可能快速地從幾百 GB 漲到幾百個(gè) TB,傳統(tǒng)的單機(jī)數(shù)據(jù)庫(kù)提...
摘要:本指南將引導(dǎo)您使用構(gòu)建其中一個(gè)入門(mén)指南。導(dǎo)入入門(mén)指南啟動(dòng)并運(yùn)行后,從菜單中打開(kāi)向?qū)А棾鱿驅(qū)槟峁木W(wǎng)站搜索和選擇任何已發(fā)布的指南。概要恭喜您已經(jīng)設(shè)置了,導(dǎo)入了入門(mén)指南,并打開(kāi)了一個(gè)瀏覽器選項(xiàng)卡來(lái)瀏覽它。 本指南將引導(dǎo)您使用Spring Tool Suite(STS)構(gòu)建其中一個(gè)入門(mén)指南。 你要構(gòu)建什么 您將選擇一個(gè)Spring指南并將其導(dǎo)入Spring Tool Suite。然后...
摘要:產(chǎn)品概述產(chǎn)品概述產(chǎn)品概述本篇目錄產(chǎn)品特點(diǎn)產(chǎn)品特點(diǎn)功能簡(jiǎn)介功能簡(jiǎn)介操作指南操作指南開(kāi)發(fā)指南開(kāi)發(fā)指南任務(wù)調(diào)度任務(wù)調(diào)度產(chǎn)品價(jià)格產(chǎn)品價(jià)格簡(jiǎn)稱,是推出的云上智能化輕量級(jí)的大數(shù)據(jù)基礎(chǔ)服務(wù)平臺(tái),能夠幫您快速構(gòu)建起大數(shù)據(jù)的分析處理能力。 產(chǎn)品概述本篇目錄產(chǎn)品特點(diǎn)功能簡(jiǎn)介操作指南開(kāi)發(fā)指南任務(wù)調(diào)度產(chǎn)品價(jià)格UCloud Smart Data Platform(簡(jiǎn)稱 USDP),是 UCloud 推出的云上智能化、...
閱讀 1792·2021-09-22 15:25
閱讀 1723·2021-09-07 10:06
閱讀 3313·2019-08-30 15:53
閱讀 1210·2019-08-29 13:12
閱讀 3520·2019-08-29 13:07
閱讀 870·2019-08-28 18:19
閱讀 2414·2019-08-27 10:57
閱讀 1101·2019-08-26 13:29