我使用以下代码生成径向渐变:
func GenerateGradient(center ds.Coord, radius int, dMethod string) *[]GradientRecord {
var r []GradientRecord
for y := center.Y - radius; y <= center.Y+radius; y++ {
for x := center.X - radius; x <= center.X+radius; x++ {
d := float64(DCalc(center, ds.Coord{X: x, Y: y}, dMethod))
p := ds.Coord{X: x, Y: y}
var v float64
v = Lerp(float64(radius), d, 1)
record := GradientRecord{Point: p.Wrap("t"), Value: v}
r = append(r, record)
}
}
return &r
}
DCalc使用的是欧几里得距离。
产生这个:
如您所见,它很平滑。但是我希望渐变结束于半径的位置,因此在Lerp线中将其更改为:
v = 1 - Lerp(float64(radius), d/float64(radius), 1)
产生这个:
如您所见,有一个十字形的条带。想知道是否有办法将其删除吗?我实际上不需要生成图像,只需生成用于其他内容的平滑渐变过渡数组即可。我做了一张照片以更好地说明问题。
谢谢!
func Lerp(v0, v1, t float64) float64 {
return (1-t)*v0 + t*v1
}