// RandomMirror builds an image with 10x10 grids of half diagonals func RandomMirror(w http.ResponseWriter, colors []color.RGBA, size int, prob float64) { canvas := svg.New(w) canvas.Start(size, size) lines := 10 fringeSize := size / lines distance := distanceTo3rdPoint(fringeSize) fringeSize = distance lines = size / fringeSize for xL := 0; xL <= lines/2; xL++ { for yL := -1; yL < lines; yL++ { var x1, x2, y1, y2, y3 int if (xL % 2) == 0 { x1, y1, x2, y2, _, y3 = right1stTriangle(xL, yL, fringeSize, distance) } else { x1, y1, x2, y2, _, y3 = left1stTriangle(xL, yL, fringeSize, distance) } xs := []int{x2, x1, x2} ys := []int{y1, y2, y3} fill1 := draw.FillFromRGBA(draw.RandomColorFromArrayWithFreq(colors, prob)) canvas.Polygon(xs, ys, fill1) xs = mirrorCoordinates(xs, lines, fringeSize, 0) canvas.Polygon(xs, ys, fill1) var x11, x12, y11, y12, y13 int if (xL % 2) == 0 { x11, y11, x12, y12, _, y13 = left2ndTriangle(xL, yL, fringeSize, distance) // we make sure that the previous triangle and this one touch each other in this point. y12 = y3 } else { x11, y11, x12, y12, _, y13 = right2ndTriangle(xL, yL, fringeSize, distance) // in order to have a perfect hexagon, // we make sure that the previous triangle and this one touch each other in this point. y12 = y1 + fringeSize } xs1 := []int{x12, x11, x12} ys1 := []int{y11, y12, y13} fill2 := draw.FillFromRGBA(draw.RandomColorFromArrayWithFreq(colors, prob)) canvas.Polygon(xs1, ys1, fill2) xs1 = mirrorCoordinates(xs1, lines, fringeSize, 0) canvas.Polygon(xs1, ys1, fill2) } } canvas.End() }
// Random builds an image with 10x10 grids of half diagonals with random background. // The image is symetric in the middle vertical axis. func Random(w http.ResponseWriter, colors []color.RGBA, width, height, lines int, prob float64) { canvas := svg.New(w) canvas.Start(width, height) fringeSize := width / lines distance := distanceTo3rdPoint(fringeSize) fringeSize = distance lines = width / fringeSize for xL := 0; xL < lines; xL++ { for yL := -1; yL <= lines; yL++ { var x1, x2, y1, y2, y3 int if (xL % 2) == 0 { x1, y1, x2, y2, _, y3 = right1stTriangle(xL, yL, fringeSize, distance) } else { x1, y1, x2, y2, _, y3 = left1stTriangle(xL, yL, fringeSize, distance) } xs := []int{x2, x1, x2} ys := []int{y1, y2, y3} canvas.Polygon(xs, ys, draw.FillFromRGBA(draw.RandomColorFromArrayWithFreq(colors, prob))) var x11, x12, y11, y12, y13 int if (xL % 2) == 0 { x11, y11, x12, y12, _, y13 = left2ndTriangle(xL, yL, fringeSize, distance) // we make sure that the previous triangle and this one touch each other in this point. y12 = y3 } else { x11, y11, x12, y12, _, y13 = right2ndTriangle(xL, yL, fringeSize, distance) // we make sure that the previous triangle and this one touch each other in this point. y12 = y1 + fringeSize } xs1 := []int{x12, x11, x12} ys1 := []int{y11, y12, y13} canvas.Polygon(xs1, ys1, draw.FillFromRGBA(draw.RandomColorFromArrayWithFreq(colors, prob))) } } canvas.End() }
// RandomGridSVG builds a grid image with with x colors selected at random for each quadrant. func RandomGridSVG(w http.ResponseWriter, colors []color.RGBA, width, height, xSquares int, prob float64) { canvas := svg.New(w) canvas.Start(width, height) squares := xSquares quadrantSize := width / squares colorMap := make(map[int]color.RGBA) for yQ := 0; yQ < squares; yQ++ { y := yQ * quadrantSize colorMap = make(map[int]color.RGBA) for xQ := 0; xQ < squares; xQ++ { x := xQ * quadrantSize if _, ok := colorMap[xQ]; !ok { colorMap[xQ] = draw.RandomColorFromArrayWithFreq(colors, prob) } canvas.Rect(x, y, quadrantSize, quadrantSize, draw.FillFromRGBA(colorMap[xQ])) } } canvas.End() }
// RandomGrid builds a grid image with with x colors selected at random for each quadrant. func RandomGrid(m *image.RGBA, colors []color.RGBA, xSquares int, prob float64) { size := m.Bounds().Size() quad := size.X / xSquares colorMap := make(map[int]color.RGBA) var currentQuadrand = 0 for x := 0; x < size.X; x++ { if x/quad != currentQuadrand { colorMap = make(map[int]color.RGBA) currentQuadrand = x / quad } for y := 0; y < size.Y; y++ { yQuadrant := y / quad if _, ok := colorMap[yQuadrant]; !ok { colorMap[yQuadrant] = draw.RandomColorFromArrayWithFreq(colors, prob) } m.Set(x, y, colorMap[yQuadrant]) } } }