2009-12-03 67 views
4

我感興趣的是建立包含重複圖案,類似於兩(公共領域)以下圖片中,Flower of Life海報大小的圖像和Penrose tiling編程使用基於數學的圖像在高分辨率藝術品

我的問題:

  1. 怎樣的人通常喜歡創建它們的計算機上的圖像?我希望答案不是,「打開Adobe Illustrator並猜測交點」,因爲這些點可以用數學方法來定義。但我也想象,並非每個對幾何圖案感興趣的人都熟悉編程。
  2. 什麼是創建這種圖像的最佳環境?特別是,從Java,Python,Processing等中獲取高分辨率圖像的最佳方式是什麼?或者,Mathematica是最好的工具嗎?

實際上計算積分和做數學並不是難的部分,在我看來(至少這不是這個問題的焦點)。 我對從程序中獲得高質量視覺產品的最佳方式感興趣。

回答

4

創建相似圖片這些是學會寫的PostScript的最佳方式。這是一種乾淨的語言,易於學習,而且一旦你瞭解得很清楚,它就非常強大。

比爾卡斯爾曼的manuals是迄今爲止高品質數學插圖的最佳參考。

+0

Postscript是一種功能強大的語言,一旦你習慣了它是基於堆棧的。 – 2009-12-03 19:28:07

1

使用像SVG這樣的矢量圖像格式。這將完全適用於任何分辨率。

Inkscape是創建這些的好工具。

一旦你有了一個矢量圖像格式,根據你選擇的語言,在編程語言中使用它有很多選擇。

例如 -

+1

這甚至不回答:-) – Joey 2009-12-03 16:34:40

+0

兩個問題,一個是仰視的聯繫 - 但它確實回答第一個問題,現在第二個是回答,至少有一個選項。 – 2009-12-03 16:35:15

+0

我仍然認爲沒有答案的基本問題。矢量格式對這些圖像有好處是顯而易見的,而且沒有問題,但是通過編程生成這些格式仍然比Inkscape,imho更好。 – Joey 2009-12-03 16:40:22

1

那麼,#2將會是一場神聖的戰爭,所以我會解決#1。 :)

這種性質的圖像的關鍵是遞歸。基本上它們是以一種可控制的方式反覆重複的相同圖像,以獲得相互間的結果。以生命之花爲例。你重複中心花瓣六次(花瓣的做法取決於你)。然後用花瓣尖端作爲中心並重疊其中一個花瓣製作六朵花。然後你遞歸地向外移動。幾輪「回合」後,你停下來畫出包含圓圈。基本上,如果你是用手工完成的話,回憶會模擬印章,移動和旋轉。

當我玩弄這些東西時,我總是發現實驗是獲取酷炫新事物的最佳方式。當然,這可能只是我缺乏想象力。 :)

我知道我在這個答案不是很重的數學,但這取決於你和實驗。請記住,COS和SIN是你的朋友,並且在cricle中有360度角度(或者根據你的數學軟件包有2pi弧度)。

編輯:添加一些數學的「花」

與(XO,YO)的中心和r的花半徑開始......

花瓣的尖端(P0,P1等)被確定...

X = Xo + (sin((n * pi)/3 + (pi/6)) * r) 
Y = Yo - (cos((n * pi)/3 + (pi/6)) * r) 

其中n是花瓣數(0..5)

一旦你計算花瓣尖,只畫花瓣,然後在開始新花小費。您還將設置一個邊界圓,以便該圓外的任何點都不會被繪製。

0

我會嘗試使用Java中的iText創建PDF。 PDF支持矢量圖形,因此它應該可以無障礙地擴展。我不知道iText如何衡量w.r.t.當你有非常多的圖形元素時的性能。

0

A1。你可能想看看海龜圖形,L-系統,迭代函數系統,空間填充曲線,以及可能還有很多我不熟悉或尚未考慮過的其他方法。

A2。您可以使用您建議的任何語言對這些文件進行編程。我喜歡Mathematica,但我知道不是每個人都有它的副本,我有一個副本'因爲我在數字處理工作,並開始玩它製作漂亮的圖片。但是Processing是免費的,其設計是爲了讓藝術家友好,並且可能是一個更好的起點。 Mathematica和Processing都是在那裏做圖形,然後不需要調用外部庫(或者擔心使用哪個庫)。

而且,雖然我同意所有人都說矢量是要走的路,但不要忘記,最終的製作步驟,在紙張或屏幕上,渲染,讓我們思考如何完成。例如,這可能會導致您使用Postscript或PDF作爲輸出格式。

玩得開心

馬克

0

那麼,我曾經用一個指南針畫畫,然後在初中......其實很簡單......但我不認爲這就是你要找的答案。

基本上它是從每個點畫出一個半徑相同的圓,直到遇到大圓圈(極限)。

1

我不知道這些圖像是如何創建的,我猜想他們是從一本書中掃描出來的,但是在我的分形工作中,我傾向於從使用<canvas>標籤開始,主要是爲了能夠改變元素的大小,並看到它繪製更多的迭代,所以我可以得到最高分辨率。

這就是像SVG這樣的問題,你需要選擇一個分辨率然後創建它,它可以上下擴展,但是如果你在一個分辨率下開發它,那麼你會更高解決方案演示,你可能會看到比你想要的更多的差距。

如果你想要做它並將它保存爲一個靜態圖像,那麼任何GUI都可以工作,因爲你在那個時候保存了一個GIF,但是如果你想要它,例如在網頁上,它看起來不錯,因爲它可以在該瀏覽器,那麼你可能想看看使用JavaScript。

數學部分並不難,所以繪製的圖像,是相當容易的,一旦你得到所需要的遞歸算法。我傾向於進行下一次迭代,直到大小低於閾值,例如,半徑爲< 3,然後退出。