問題是,基于以下程序 https://github.com/adonovan/gopl.io/blob/master/ch3/surface/main.go將其轉為 Web 服務器并將 SVG 呈現(xiàn)為網(wǎng)頁為 SVG 著色,使峰為紅色,谷為藍色我肯定第一部分是對的,我想我第二部分是對的,但顯然不是,但我不知道我哪里錯了。請幫忙。package mainimport ( "fmt" "math" "net/http" "strconv")const ( cells = 100 // number of grid cells xyrange = 30.0 // axis ranges (-xyrange..+xyrange) angle = math.Pi / 6 // angle of x, y axes (=30°))var height, width = 300, 600 // canvas size in pixelsvar xyscale = width / 2 / xyrange // pixels per x or y unitvar zscale = float64(height) * 0.4 // pixels per z unitvar sin30, cos30 = math.Sin(angle), math.Cos(angle) // sin(30°), cos(30°)func main() { addr := ":8000" fmt.Printf("Visit\n http://localhost%s/\n http://localhost%[1]s/?height=600&width=1200\n", addr) //http server http.HandleFunc("/", handle) http.ListenAndServe(addr, nil)}func handle(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "image/svg+xml") if err := r.ParseForm(); err != nil { return } for k, v := range r.Form { if k == "height" { h, _ := strconv.Atoi(v[0]) if h > 0 { height = h } } if k == "width" { w, _ := strconv.Atoi(v[0]) if w > 0 { width = w } } } fmt.Fprintf(w, "</svg>")}這是我得到的結果:注意,雖然這個問題似乎是針對 Go 的,但它實際上是 getColor()我要問的算法。即使您不使用 Go 編寫,您也可以理解/回答。
1 回答

楊__羊羊
TA貢獻1943條經(jīng)驗 獲得超7個贊
您的代碼使用格式動詞%x
將十六進制值打印到 SVG 的fill
屬性:
fmt.Fprintf(w, "<polygon points='%g,%g %g,%g %g,%g %g,%g' fill='#%x%x%x'/>\n", ax, ay, bx, by, cx, cy, dx, dy, r, g, b)
這會導致某些數(shù)字(如 0 和 1)被格式化為一個十六進制數(shù)字。例如 RGB (254, 0, 1) 將被格式化為fe01
. 然后瀏覽器會錯誤地呈現(xiàn)顏色。
將格式動詞更改為%02x
以確保 RGB 始終以兩個十六進制數(shù)字打印。
現(xiàn)在 RGB (254, 0, 1) 打印為fe0001
,這是正確的十六進制顏色。
輸出:
添加回答
舉報
0/150
提交
取消