幾何之美(三)

2021-09-29 17:56:56 字數 1313 閱讀 4053

這裡你不僅可以看到我在寫processing**是的特點和程式設計風格,還能看到各種各樣的形式和方法。在你程式設計的同時你會發現你自己的,也可以通過

上共享的**中看到其他人的程式設計風格。

畫規則的多邊形:

你完全不能想象乙個沒有設計圖的房子會成什麼樣子,所以你不應該沒有規劃地寫**。即使processing是乙個簡單明瞭的語言,我仍然需要在敲鍵盤之前畫乙個草圖先看看結果是什麼樣子。

第一步:在紙上規劃

首先,畫一幅純手工的**來喚起關於多邊形的古老回憶。我先畫的是六邊形。像你看到的那樣,我在中心和頂點之間用線段連線上,分成了六塊,每塊拼在一起就是乙個完整的圓,或者說每塊的中心角的和是360度。

我僅僅需要找到問題解決的思路,草圖就可以幫助我勝任了。我不需要在寫程式的時候生成這個表。

第二步:一些基本的三角法則

如果你畫了一條長度為r的線段,而且它與底邊的夾角是θ,那麼x(水平投影)和y(垂直投影)分別等於多少呢?如果你知道一些關於三角規則的知識,答案將立即得出:分別是r

cos θ, 

rsin θ。

第三步:設計討論

從0到n(邊的數量)計算每個頂點,並且連線他們彼此是一項工程。在執行的每一步,我們畫的角度都會增加360°/n。

畫一組線條的最重要的問題是她們只是一些線條——你不需要得到乙個可以填充的真實的圖形,比如rect()和********()方法。幸運的是,processing允許你通過beginshape()、vertex()、endshape()方法來建立你自己的圖形。在beginshape()幫助文件的第一頁的例項是可以參考的模型。所以接下來的設計討論主要圍繞將多邊形轉換為真實的圖形。

既然你可能會想要通過乙個程式來畫出許多多邊形,呼叫polygon()方法是個好主意。它需要以下四個引數邊的數量,中心點x和y座標,還有半徑。下面是**實現部分。我在setup()方法中使用不同的方式來呼叫polygon()。既然我通過度數計算角,通過弧度計算正弦,余弦。所以必須使用radians()方法來進行轉換。

void setup()

void polygon(int n, float cx, float cy, float r)

endshape(close);

}

走兩步,看一步

程式可以執行了,現在是開始思考該新增或者改動一些什麼東西的時候了。第一,三角和五邊形可能會有些錯誤;它們往往畫點而不是線。原因是它們是奇數以至於第乙個頂點(在0°)連線到右邊的點。最好的方案是新增乙個為第乙個頂點初始化角的引數。但是我設計討論的結果是使用rotate()方法。這個角到底是應該用角度表示還是用弧度值來表示呢?答案是:弧度,為了和processing中的其他元素保持一致。

架構之美閱讀筆記三

今天閱讀了 架構之美 第三章,主要利用遊戲軟體開發作為例子,向我們展示了在設計一些系統架構時,確保系統的伸縮性的重要性。對於一款執行在網路上或網際網路上的系統,如果你希望在設計之初就將系統的適用範圍的誤差控制在幾個數量級以內的想法是荒謬的。因為我們無法確定設計出的系統在將來的運用時將會有多少客戶會同...

架構之美閱讀筆記(三)

架構之美告訴我們什麼是架構,那什麼是架構呢?架構應該是一組結構,於一組設計規則,能減少複雜性。常見定義是,每種結構由各種型別的元件和關係組成,它們如何組合 相互呼叫 通訊 同步 及其其他互動,簡單來說就是元件及元件間的關係。其次我們要理解架構存在的目的,是確保利益相關人員的關注點能夠得到滿足,而在構...

Qt之美(三) 隱式共享

為了最大化資源使用,和最小化資料拷貝,qt在很多類中用到了隱式資料共享,以便資料僅在被寫入時才被拷貝。該機制也被稱為flyweight模式。讓我們以qbytearray為例,看看其是如何實現的。其內部使用乙個名為data的私有結構體來追蹤共享的資料 cpp view plain copy struc...