如何绘制隐式函数?
我正在尝试开发一个隐式绘图仪。例如,如果我想绘制一个比喻,x将会变化,并且y会被计算为相应的x值。如何绘制隐式函数?
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
ctx.beginPath();
// y = (x-5)*(x-5)
var iPoints=20,
nY=0;
for (var x=-10; x<=iPoints; x++) {
nY = ((x-5)*(x-5));
ctx.lineTo(200-x, 300-nY);
}
ctx.stroke();
或者看到这里https://jsfiddle.net/a0gLqrvr/ 但我怎么可以绘制隐函数?例如:x^3 + y^3 = 3*x*y^2 - x - 1
我该如何同时改变x和y?
你可以通过一个例子来说明我的一些观点吗(也许在jsfiddle中)?
在此先感谢。
不是最好的办法,也不是最快的办法。但把它做一个简单的方法:
// x^2 + y^2 = 25^2
for (var x=-30; x<=+30; x+=0.01) {
var smallest=1e10;
var best_y=0;
for (var y=-30; y<=+30; y+=0.01) {
var v=Math.abs(x*x+y*y-625);
if(v<smallest) {smallest=v;best_y=y;}
}
if(smallest<0.1) {
ctx.fillRect(100+x, 100-best_y,1,1);
}
}
,你会得到这样的事情:
你可以看到的jsfiddle here。
要绘制f(x,y)=0
,使用marching squares方法:
将您的区域为小细胞
的网格计算的
f
符号在每个单元的顶点找到曲线在哪里穿过一个单元格:在具有不同符号的边缘上。使用线性插值查找交叉点并将其与线段连接在一起。
另请参阅https://www.mattkeeter.com/projects/contours/例如。 – lhf
感谢您的回答。是的,可悲的是,在“隐式函数”的情况下,如果没有“线性插值”和“行进方块”,通常绘制的曲线将会变成虚线。 – user3815508
我仍然在编程“隐式函数”。但可悲的是没成功。在我看来,你有一个线索。你能否请详细描述你的解决方案。也许你想看看我的方法,失败了。 http://*.com/questions/43072126/how-to-find-y-for-corresponding-x-values-implicit-function-complex-number/43072826?noredirect=1也在这里http:// *。 com/questions/43080688/algorithm-which-adapt-solve-the-complex-equations-implicit-function-fx-y预先感谢您。 – user3815508
感谢您的回答。它同时改变x和y。也许不是“fillRect”,我会使用“moveTo”和“lineTo”。 – user3815508