package math import "math" type Point struct { X, Y float64 } // ShoelaceArea calculates the area of a polygon using the Shoelace formula. // It takes a slice of Point structs representing the vertices of the polygon. // If the number of vertices is less than 3, it returns 0.0 indicating that it is not a valid polygon. func ShoelaceArea(polygon []Point) float64 { if len(polygon) < 3 { return 0.0 // Not a polygon } var area float64 = 0.0 j := len(polygon) - 1 // The last vertex is the 'previous' one to the first for i := 0; i < len(polygon); i++ { area += (polygon[j].X + polygon[i].X) * (polygon[j].Y - polygon[i].Y) j = i // j is previous vertex to i } return 0.5 * math.Abs(area) } // floodFill performs a flood fill algorithm on the given matrix starting from the specified row and column. // It replaces all occurrences of the previous color with the new color. // The height and width parameters define the dimensions of the matrix. func floodFill(matrix Matrix[int64], row int, col int, prevColor int64, newColor int64, height int, width int) { if row < 0 || row >= height || col < 0 || col >= width { return } if matrix[row][col] != prevColor { return } if matrix[row][col] == newColor { return } matrix[row][col] = newColor floodFill(matrix, row+1, col, prevColor, newColor, height, width) floodFill(matrix, row-1, col, prevColor, newColor, height, width) floodFill(matrix, row, col+1, prevColor, newColor, height, width) floodFill(matrix, row, col-1, prevColor, newColor, height, width) }