package org.jzy3d.plot2d.primitives;

import java.util.List;

import org.jzy3d.colors.Color;
import org.jzy3d.colors.ColorMapper;
import org.jzy3d.colors.colormaps.ColorMapRedAndGreen;
import org.jzy3d.maths.Coord2d;
import org.jzy3d.maths.Coord3d;
import org.jzy3d.plot3d.pipelines.NotImplementedException;
import org.jzy3d.plot3d.primitives.AbstractDrawable;
import org.jzy3d.plot3d.primitives.ConcurrentScatterMultiColorList;
import org.jzy3d.plot3d.primitives.ScatterMultiColorList;

public class ScatterSerie2d implements Serie2d {
    protected ScatterMultiColorList scatter;
    protected String name;

    public ScatterSerie2d(String name) {
        this.name = name;
        this.scatter = makeDrawable();
    }

    protected ScatterMultiColorList makeDrawable() {
        ColorMapRedAndGreen g = colormap();
        ColorMapper m = colormapper(g);
        ScatterMultiColorList s = new ConcurrentScatterMultiColorList(m);
        s.setWidth(3);
        return s;
    }

    public ColorMapper colormapper(ColorMapRedAndGreen g) {
        ColorMapper m = new ColorMapper(g, 0, 1) {
            @Override
            public Color getColor(Coord3d coord) {
                Color out = colormap.getColor(this, coord.x, coord.z, coord.y);

                if (factor != null)
                    out.mul(factor);
                return out;
            }
        };
        return m;
    }

    public ColorMapRedAndGreen colormap() {
        ColorMapRedAndGreen g = new ColorMapRedAndGreen() {
            @Override
            public Color getColor(double x, double y, double z, double zMin, double zMax) {
                double rel_value = processRelativeZValue(z, zMin, zMax);

                float bCenter = 0.20f;
                float rCenter = 0.80f;
                float topWidth = 0.40f;
                float botWidth = 0.80f;

                float b = 0;
                float v = (float) colorComponentRelative(rel_value, bCenter, topWidth, botWidth);
                float r = (float) colorComponentRelative(rel_value, rCenter, topWidth, botWidth);
                return new Color(r, v, b);
            }
        };
        g.setDirection(false);
        return g;
    }

    @Override
    public void add(float x, float y) {
        scatter.add(new Coord3d(x, y, 0));
    }

    @Override
    public void add(double x, double y) {
        scatter.add(new Coord3d(x, y, 0));
    }

    @Override
    public void add(Coord2d c) {
        scatter.add(new Coord3d(c.x, c.y, 0));
    }

    @Override
    public void add(Coord2d c, Color color) {
        scatter.add(new Coord3d(c.x, c.y, 0));
    }

    @Override
    public void add(float x, float y, Color color) {
        throw new NotImplementedException();
    }

    @Override
    public void add(double x, double y, Color color) {
        throw new NotImplementedException();
    }

    @Override
    public void add(List c) {
        for (Coord2d c2 : c) {
            scatter.add(new Coord3d(c2.x, c2.y, 0));
        }
    }

    @Override
    public void setColor(Color color) {
        // line.setColor(color);
    }

    @Override
    public Color getColor() {
        return null;// line.getWireframeColor();
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public AbstractDrawable getDrawable() {
        return scatter;
    }

    @Override
    public void clear() {
        scatter.clear();
    }

    @Override
    public void setWidth(int width) {
        scatter.setWidth(width);
    }
}

 

Ads help maintain this website.