2017-03-17 68 views
3

我正在嘗試開發一個隱式繪圖儀。例如,如果我想繪製一個比喻,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中)?
在此先感謝。

回答

1

不是最好的辦法,也不是最快的辦法。但把它做一個簡單的方法:

// 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); 
    } 
} 

,你會得到這樣的事情:

Implicit Circle

你可以看到的jsfiddle here

+1

感謝您的回答。它同時改變x和y。也許不是「fillRect」,我會使用「moveTo」和「lineTo」。 – user3815508

3

要繪製f(x,y)=0,使用marching squares方法:

  • 將您的區域爲小細胞

  • 的網格計算的f符號在每個單元的頂點

  • 找到曲線在哪裏穿過一個單元格:在具有不同符號的邊緣上。使用線性插值查找交叉點並將其與線段連接在一起。

+0

另請參閱https://www.mattkeeter.com/projects/contours/例如。 – lhf

+0

感謝您的回答。是的,可悲的是,在「隱式函數」的情況下,如果沒有「線性插值」和「行進方塊」,通常繪製的曲線將會變成虛線。 – user3815508

+0

我仍然在編程「隱式函數」。但可悲的是沒成功。在我看來,你有一個線索。你能否請詳細描述你的解決方案。也許你想看看我的方法,失敗了。 http://stackoverflow.com/questions/43072126/how-to-find-y-for-corresponding-x-values-implicit-function-complex-number/43072826?noredirect=1也在這裏http:// stackoverflow。 com/questions/43080688/algorithm-which-adapt-solve-the-complex-equations-implicit-function-fx-y預先感謝您。 – user3815508