mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2025-08-12 17:52:39 +00:00
make zh2tw
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
## 3.3. 複數
|
||||
|
||||
|
||||
Go提供了两种精度的复数类似, complex64 和 complex128, 分别对应 float32 和 float64精度. 内置的 complex 函数用于构建复数, 内建的 real 和 imag 函数返回复数的实部和虚部:
|
||||
Go提供了兩種精度的複數類似, complex64 和 complex128, 分别對應 float32 和 float64精度. 內置的 complex 函數用於構建複數, 內建的 real 和 imag 函數返迴複數的實部和虛部:
|
||||
|
||||
```Go
|
||||
var x complex128 = complex(1, 2) // 1+2i
|
||||
@@ -11,28 +11,28 @@ fmt.Println(real(x*y)) // "-5"
|
||||
fmt.Println(imag(x*y)) // "10"
|
||||
```
|
||||
|
||||
如果一个浮点数面值或一个十进制整数面值后面跟着一个i, 例如 3.141592i 或 2i, 它将构成一个复数的虚部, 复数的实部是0:
|
||||
如果一個浮點數面值或一個十進製整數面值後面跟着一個i, 例如 3.141592i 或 2i, 它將構成一個複數的虛部, 複數的實部是0:
|
||||
|
||||
```Go
|
||||
fmt.Println(1i * 1i) // "(-1+0i)", i^2 = -1
|
||||
```
|
||||
|
||||
在常量算术规则下, 一个复数常量可以加到另一个常量(整数或浮点数, 实部或虚部), 我们可以用自然的方式写复数, 就像 1+2i, 或与之等价的写法 2i+1. 上面x和y的声明语句还可以简化:
|
||||
在常量算術規則下, 一個複數常量可以加到另一個常量(整數或浮點數, 實部或虛部), 我們可以用自然的方式寫複數, 就像 1+2i, 或與之等價的寫法 2i+1. 上面x和y的聲明語句還可以簡化:
|
||||
|
||||
```Go
|
||||
x := 1 + 2i
|
||||
y := 3 + 4i
|
||||
```
|
||||
|
||||
复数也可以用 == 和 != 进行相等比较. 只有两个复数的实部和虚部都相等的时候它们才是相等的.
|
||||
複數也可以用 == 和 != 進行相等比較. 隻有兩個複數的實部和虛部都相等的時候它們纔是相等的.
|
||||
|
||||
math/cmplx 包提供了复数处理的许多函数, 例如求复数的平方根函数和求幂函数.
|
||||
math/cmplx 包提供了複數處理的許多函數, 例如求複數的平方根函數和求冪函數.
|
||||
|
||||
```Go
|
||||
fmt.Println(cmplx.Sqrt(-1)) // "(0+1i)"
|
||||
```
|
||||
|
||||
下面的程序使用complex128复数算法来生成一个Mandelbrot图像.
|
||||
下面的程序使用complex128複數算法來生成一個Mandelbrot圖像.
|
||||
|
||||
```Go
|
||||
gopl.io/ch3/mandelbrot
|
||||
@@ -83,19 +83,19 @@ func mandelbrot(z complex128) color.Color {
|
||||
}
|
||||
```
|
||||
|
||||
遍历1024x1024图像每个点的两个嵌套的循环对应 -2 到 +2 区间的复数平面. 程序反复测试每个点对应复数值平方值加一个增量值对应的点是否超出半径为2的圆. 如果超过了, 通过根据逃逸的迭代次数对应的灰度颜色来代替. 如果不是, 该点属于Mandelbrot集合, 使用黑色颜色标记. 最终程序将生成的PNG格式分形图像图像输出到标准输出, 如图3.3所示.
|
||||
遍歷1024x1024圖像每個點的兩個嵌套的循環對應 -2 到 +2 區間的複數平面. 程序反複測試每個點對應複數值平方值加一個增量值對應的點是否超齣半徑爲2的圓. 如果超過了, 通過根據逃逸的迭代次數對應的灰度顔色來代替. 如果不是, 該點屬於Mandelbrot集合, 使用黑色顔色標記. 最終程序將生成的PNG格式分形圖像圖像輸齣到標準輸齣, 如圖3.3所示.
|
||||
|
||||
**练习3.5:** 实现一个彩色的Mandelbrot图像, 使用 image.NewRGBA 创建图像, 使用 color.RGBA 或 color.YCbCr 生成颜色.
|
||||
**練習3.5:** 實現一個綵色的Mandelbrot圖像, 使用 image.NewRGBA 創建圖像, 使用 color.RGBA 或 color.YCbCr 生成顔色.
|
||||
|
||||
**练习3.6:** 超采样技术可以降低每个像素对计算颜色值和平均值的影响. 简单的方法是将每个像素分层四个子像素, 实现它.
|
||||
**練習3.6:** 超采樣技術可以降低每個像素對計算顔色值和平均值的影響. 簡單的方法是將每個像素分層四個子像素, 實現它.
|
||||
|
||||
**练习3.7:** 另一个生成分形图像的方式是使用牛顿法来求解一个复数方程, 例如 z^4 − 1 = 0. 每个起点到四个根的迭代次数对应阴影的灰度. 方程根对应的点用颜色表示.
|
||||
**練習3.7:** 另一個生成分形圖像的方式是使用牛頓法來求解一個複數方程, 例如 z^4 − 1 = 0. 每個起點到四個根的迭代次數對應陰影的灰度. 方程根對應的點用顔色表示.
|
||||
|
||||

|
||||
|
||||
**练习3.8:** 通过提高精度来生成更多级别的分形. 使用四种不同精度类型的数字实现相同的分形: complex64, complex128, big.Float, and big.Rat. (后面两种类型在 math/big 包声明. Float是有指定限精度的浮点数; Rat是无效精度的有理数.) 它们间的性能和内存使用对比如何? 当渲染图可见时缩放的级别是多少?
|
||||
**練習3.8:** 通過提高精度來生成更多級别的分形. 使用四種不同精度類型的數字實現相同的分形: complex64, complex128, big.Float, and big.Rat. (後面兩種類型在 math/big 包聲明. Float是有指定限精度的浮點數; Rat是無效精度的有理數.) 它們間的性能和內存使用對比如何? 當渲染圖可見時縮放的級别是多少?
|
||||
|
||||
**练习3.9:** 编写一个web服务器, 用于给客户端生成分形的图像. 运行客户端用过HTTP参数参数指定x,y和zoom参数.
|
||||
**練習3.9:** 編寫一個web服務器, 用於給客戶端生成分形的圖像. 運行客戶端用過HTTP參數參數指定x,y和zoom參數.
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user