Prueba de generación de imágenes Ir cardioide.
Idea: paquetes de datos imagen Va imagen generada -> en formato html, ver imágenes a través de la web.
En primer lugar la secuencia de comandos (cambiar el formato de datos -> html)
gofile = $ 1 htmfile = $ 2 Va la estructura $ gofile.go eval "./$gofile" >> temp_go_jpg.data si [-e "$ htmfile.html"] entonces rm $ htmfile.html fi echo "<img src = \" datos: image / png; base64, ">> $ htmfile.html sed -i "s / iMAGEN: // g" temp_go_jpg.data temp_go_jpg.data cat >> $ htmfile.html echo "\">" >> $ htmfile .html rm temp_go_jpg.data
En donde los datos de reemplazo es la parte marcada en rojo.
echo "<img src = \" data: image / png; base64," >> $ htmfile.html
sed -i "s / IMAGE: // g" temp_go_jpg.data
temp_go_jpg.data cat >> $ htmfile.html
echo "\">" >> $ htmfile.html
Si este archivo script es gen.sh, vaya image.go archivo, que se genera index.html, que puede ejecutar el comando ./gen.sh índice de imágenes
Cardioide ecuación seleccionada: (X 2 + Y 2 - T) 3. = X 2 Y 3.
Para un pequeño efecto de gradiente, en la región de color en forma de corazón cambia de acuerdo con t
Código es el siguiente:
paquete principal de importación ( "golang.org/x/tour/pic" "imagen" "imagen / de color" "matemáticas" ) struct tipo de imagen { int ancho } //计算心形线半径 func (img * Imagen) CalcHeartRadius (x , y, int desplazamiento) float64 { //心形线方程: (x ^ 2 + y ^ 2 - t) ^ 3 = x ^ 2 * y ^ 3,求t //做标轴修正x = x, y = -y,方程(x ^ 2 + y ^ 2 - t) ^ 3 = 0 - x ^ 2 * y ^ 3,求t // x = x - desplazamiento, y = y - cambio fx: = float64 (x ) - float64 (shift) fy: = float64 (y) - float64 (shift) fValue1: = Math.pow (fx, 2) fCbrt: = math.Cbrt (fValue1) * fy ft: = Math.pow (fx, 2 ) + Math.pow (fy, 2) + fCbrt si ft <0 { return 0 } Math.sqrt retorno (ft) } func (img * Imagen) ColorModel () {color.Model retorno color.RGBAModel } func (img * Imagen) Límites () {image.Rectangle retorno image.Rect (0, 0, img. anchura, img.width) } func (img * Image) A (x, y int) color.Color { intShift: = img.width / 2 radio: = img.CalcHeartRadius (x, y, intShift) fmax: = float64 ( intShift) * 0,9 si el radio> fmax { retorno color.RGBA {0, 0, 0, 0} } intRadius: = uint8 (radio) si fmax> 150 { intRadius = uint8 (150 * float64 (intRadius) / fmax) } retorno color.RGBA {255-intRadius, 0, 0, 255} } func main () { anchura: = 240 m: = Image {anchura} pic.ShowImage (& m) }
Debido a que los paquetes van imagen eje de coordenadas, eje y dirección hacia abajo, es decir, el punto (0,0) en la parte superior izquierda de la plaza, por lo que para cambiar la ecuación, y se sustituye -Y, más se convierte en el centro de la forma de corazón (anchura / 2, ancho / 2), la traducción de este modo la ecuación, x = x-ancho / 2, y = y-wdith / 2
Una vez generada, HTML abierto, ver imágenes, imágenes de la siguiente manera: