Невозможно построить массив функций - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь oop просмотреть список параметров для одной функции, чтобы нарисовать одну отдельную строку для каждого значения параметра. Цикл работать не будет: все линии нарисованы одинаково (только последняя линия). Он работает, если я отбрасываю цикл. См. Код ниже (секция цикла закомментирована).

package main

import (
    "fmt"
    "gonum.org/v1/plot"
    "gonum.org/v1/plot/plotter"
    "gonum.org/v1/plot/vg"
    "image/color"
    "math"
)

func main() {
    etaarr := []float64{0.3, 0.5, 0.7}
    etalabel := []string{"0.3", "0.5", "0,7"}
    etacolor := []color.RGBA{{B: 255, A: 255}, {G: 255, A: 255}, {R: 255, A: 255}}

    p, err := plot.New()
    if err != nil {
        panic(err)
    }

    p.Title.Text = "TESTFUNCPLOT2"
    p.X.Label.Text = "c"
    p.Y.Label.Text = "u"
    p.X.Min = 0
    p.X.Max = 100
    p.Y.Min = 0
    p.Y.Max = 40

    p.Add(plotter.NewGrid())
    crra := make([]*plotter.Function, len(etaarr))

    /* Plots all lines as one (=last) line: Why??
        for i, iv := range etaarr {
            crra[i] = plotter.NewFunction(func(c float64) float64 { return (math.Pow(c, (1.0-iv)) - 1.0) / (1.0 - iv) })
            fmt.Println("i=", i, " iv=", iv)
        }
    */

    // Plots 3 separate lines:
    crra[0] = plotter.NewFunction(func(c float64) float64 { return (math.Pow(c, (1.0-etaarr[0])) - 1.0) / (1.0 - etaarr[0]) })
    crra[1] = plotter.NewFunction(func(c float64) float64 { return (math.Pow(c, (1.0-etaarr[1])) - 1.0) / (1.0 - etaarr[1]) })
    crra[2] = plotter.NewFunction(func(c float64) float64 { return (math.Pow(c, (1.0-etaarr[2])) - 1.0) / (1.0 - etaarr[2]) })

    for i, _ := range etaarr {
        crra[i].Color = etacolor[i]
        p.Add(crra[i])
        p.Legend.Add(etalabel[i], crra[i])
    }

    // Save the plot to a PNG file.
    if err := p.Save(6*vg.Inch, 4*vg.Inch, "testfuncplot2.png"); err != nil {
        panic(err)
    }

    fmt.Println("Finished")
} // End func main
...