这个是A Tour of Go这个教程里面的第二个练习,原题如下:

实现 Pic。它应当返回一个长度为 dy 的切片,其中每个元素是一个长度为 dx,元素类型为 uint8 的切片。当你运行此程序时,它会将每个整数解释为灰度值(好吧,其实是蓝度值)并显示它所对应的图像。

图像的选择由你来定。几个有趣的函数包括 (x+y)/2x*yx^yx*log(y) 和 x%(y+1)

(提示:需要使用循环来分配 [][]uint8 中的每个 []uint8;请使用 uint8(intValue) 在类型之间转换;你可能会用到 math 包中的函数。)

这个题比较简单,就是要利用循环,创建一个二维切片(数组),然后给每个元素赋一个值,这个值可以根据二维数组的坐标xy来计算,题目中提供了几个函数。我们用x ^ y试一下:

package main

import "golang.org/x/tour/pic"

func Pic(dx, dy int) [][]uint8 {
	// 二维切片,外层长度为dy
	p := make([][]uint8, dy)
	// 通过循环,给每个外层元素创建一个切片
	for y := range p {
		p[y] = make([]uint8, dx)
		for x := range p[y] {
			// 给每个元素赋值,参考题目中的其他函数
			p[y][x] = uint8(x ^ y)
		}
	}
	return p
}

func main() {
	pic.Show(Pic)
}

执行结果是一张256X256的图片,如下:

也可以试试其他函数,会生成不同的图片。

Tags:

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.