ch3/ch3-02 #187
ch3/ch3-02
#187
Replies: 3 comments 1 reply
-
纯新手,感觉练习好难啊!有没有答案什么的 |
Beta Was this translation helpful? Give feedback.
1 reply
-
3.4
|
Beta Was this translation helpful? Give feedback.
0 replies
-
练习3.2: package main
import (
"fmt"
"math"
)
const (
width, height = 600, 320
cells = 100
xyrange = 30.0
xyscale = width / 2 / xyrange
zscale = height * 0.4
angle = math.Pi / 6
)
var sin30, cos30 = math.Sin(angle), math.Cos(angle)
func main() {
fmt.Printf("<svg xmlns='http://www.w3.org/2000/svg' "+
"style='stroke: grey; fill: white; stroke-width: 0.7' "+
"width='%d' height='%d'>", width, height)
for i := 0; i < cells; i++ {
for j := 0; j < cells; j++ {
ax, ay, az := corner(i+1, j)
bx, by, bz := corner(i, j)
cx, cy, cz := corner(i, j+1)
dx, dy, dz := corner(i+1, j+1)
avgZ := (az + bz + cz + dz) / 4
maxZ := 1.
minZ := -1 / math.Pi
relativeZ := int32(math.Round((avgZ - minZ) / (maxZ - minZ) * 255))
color := (relativeZ << 16) | (255 - relativeZ)
fmt.Printf("<polygon points='%g,%g %g,%g %g,%g %g,%g' fill='#%6x'/>\n",
ax, ay, bx, by, cx, cy, dx, dy, color)
}
}
fmt.Println("</svg>\n")
}
func corner(i, j int) (float64, float64, float64) {
x := xyrange * (float64(i)/cells - 0.5)
y := xyrange * (float64(j)/cells - 0.5)
z := f(x, y)
sx := width/2 + (x-y)*cos30*xyscale
sy := height/2 + (x+y)*sin30*xyscale - z*zscale
return sx, sy, z
}
func f(x, y float64) float64 {
r := math.Hypot(x, y)
return math.Sin(r) / r
} |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
ch3/ch3-02
中文版
https://golang-china.github.io/gopl-zh/ch3/ch3-02.html
Beta Was this translation helpful? Give feedback.
All reactions