func plot3x(opt *goga.Optimiser, onlyFront0 bool, i, j, k int, ptRad float64) { // points var X, Y, Z []float64 if onlyFront0 { for _, sol := range opt.Solutions { if sol.Feasible() && sol.FrontId == 0 { X = append(X, sol.Flt[i]) Y = append(Y, sol.Flt[j]) Z = append(Z, sol.Flt[k]) } } } else { X, Y, Z = make([]float64, opt.Nsol), make([]float64, opt.Nsol), make([]float64, opt.Nsol) for m, sol := range opt.Solutions { X[m], Y[m], Z[m] = sol.Flt[i], sol.Flt[j], sol.Flt[k] } } // create a new VTK Scene scn := vtk.NewScene() scn.HydroLine = false scn.FullAxes = true scn.AxesLen = 1.1 scn.WithPlanes = false scn.LblX = io.Sf("x%d", i) scn.LblY = io.Sf("x%d", j) scn.LblZ = io.Sf("x%d", k) scn.LblSz = 20 // reference particles var Ps vtk.Spheres switch opt.RptName { case "UF3": np := 101 nx := opt.Nsol c1 := 0.5 * (1.0 + 3.0*(float64(1)-2.0)/(float64(nx)-2.0)) c2 := 0.5 * (1.0 + 3.0*(float64(2)-2.0)/(float64(nx)-2.0)) Ps.X = utl.LinSpace(0, 1, np) Ps.Y = make([]float64, np) Ps.Z = make([]float64, np) for i := 0; i < np; i++ { Ps.Y[i] = math.Pow(Ps.X[i], c1) Ps.Z[i] = math.Pow(Ps.X[i], c2) } Ps.R = utl.DblVals(np, 0.7*ptRad) Ps.Color = []float64{0, 0, 1, 1} Ps.AddTo(scn) scn.FullAxes = false } // particles var P vtk.Spheres P.X, P.Y, P.Z = X, Y, Z P.R = utl.DblVals(len(X), ptRad) P.Color = []float64{1, 0, 0, 1} P.AddTo(scn) // start interactive mode scn.SaveEps = false scn.SavePng = false scn.PngMag = 2 scn.Fnk = io.Sf("/tmp/goga/m3_pts_%s", opt.RptName) scn.Run() }