绘制2D函数等高线图时的视觉假象(使用FPlot)

时间:2015-10-10 17:55:26

标签: c# .net math plot

所以我使用开源.NET库来绘制:FPlot

这是我尝试绘制的功能: f(x,y)= x ^ 2 + 3 * y ^ 2 + 2 * x * y

这就是我想要的样子:

enter image description here

澄清:

  1. 我不需要与图像完全相同的外观,我只需要图表在数学上正确
  2. 图片中只有10个轮廓,我需要尽可能多的适合屏幕
  3. 以下是我尝试这样做的方法:

            var graphFunction = new Function2D();
            graphFunction.source = "return (pow(x,2)+3*pow(y,2)+2*x*y)/10;"; 
            /* I'm dividing by 10 because otherwise the whole plot is solid color */
            graphFunction.Compile(true);
    

    这就是FPlot生成的绘图如何近距离查看:

    enter image description here

    这正是我想要的,但当我在这里缩小时会发生什么: enter image description here Theese 额外的椭圆不应该在那里,实际上它们不在那里,这只是一个图形的人工制品,因为当你放大其中一个theese' fake'省略号这就是你所看到的:

    enter image description here

    问题可能出在这一行:

            graphFunction.source = "return (pow(x,2)+3*pow(y,2)+2*x*y)/10;"; 
    

    ...或在FPlot源代码中。任何想法?

    更新 因此,图中的z值似乎是问题所在。当一个函数的值,z = f(x,y)在图中超过z1(max z)值时,它会重置为z = z%z1(当z低于z0时也会发生这种情况),这会导致这些&#34 ;线条" - 就像我想的那样,它们不是细长的线条。

    这意味着解决方案是:在屏幕上将z0设置为min f(x,y),并在屏幕上将z1设置为max f(x,y)。

1 个答案:

答案 0 :(得分:1)

使FPlotLibrary.GraphControl的显示边框在所有3个维度中具有相同的值,问题就会消失:

        graphControl1.x0 = -40;
        graphControl1.x1 = 40;
        graphControl1.y0 = -40;
        graphControl1.y1 = 40;
        graphControl1.z0 = -40;
        graphControl1.z1 = 40;

enter image description here

顺便说一下,“问题”会再现,例如,如果你这样做了

        graphControl1.x0 = -40;
        graphControl1.x1 = 40;
        graphControl1.y0 = -40;
        graphControl1.y1 = 40;
        graphControl1.z0 = -1;
        graphControl1.z1 = 1;

enter image description here