2017-03-17 6 views
3

Ich versuche, einen impliziten Plotter zu entwickeln.
Zum Beispiel, wenn ich eine Parabel zeichnen will, wird x variieren und y wird für entsprechende x-Werte berechnet.Wie kann ich eine implizite Funktion plotten?

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(); 

Oder sehen hier https://jsfiddle.net/a0gLqrvr/ Aber wie kann ich eine implizite Funktion plotten?
Zum Beispiel:
x^3 + y^3 = 3*x*y^2 - x - 1
Wie kann ich x und y gleichzeitig ändern?
Können Sie mir anhand eines Beispiels einige Punkte zeigen (vielleicht in jfiddle)?
Vielen Dank im Voraus.

Antwort

1

Nicht der beste Weg, und nicht der schnelle Weg. Aber eine einfache Möglichkeit, es zu tun bekommen:

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

Und Sie so etwas wie dieses:

Implicit Circle

Sie können sehen, die jsfiddle here.

+1

Danke für die Antwort. Es variiert gleichzeitig x und y. Vielleicht anstelle von "fillRect" würde ich "moveTo" und "lineTo" verwenden. – user3815508

3

f(x,y)=0 zu zeichnen, verwenden, um die marching squares Methode:

  • divide Region in ein Gitter von kleinen Zellen

  • das Vorzeichen von f an den Ecken jeder Zelle berechnen

  • Finden Sie, wo die Kurve eine Zelle kreuzt: an Kanten mit unterschiedlichen Vorzeichen. Verwenden Sie die lineare Interpolation, um die Kreuzungspunkte zu finden und sie mit einem Liniensegment zu verbinden.

+0

Siehe auch https://www.mattkeeter.com/projects/contours/ zum Beispiel. – lhf

+0

Danke für die Antwort. Ja, ich sehe leider bei "impliziter Funktion", ohne "lineare Interpolation" und "marschierende Quadrate", oft wird die gezeichnete Kurve gestrichelt. – user3815508

+0

Ich programmiere immer noch "implizite Funktion". Aber leider erfolglos. Es scheint mir, dass Sie eine Ahnung haben. Könnten Sie bitte Ihre Lösung näher beschreiben? Vielleicht willst du meine Vorgehensweise sehen, die gescheitert ist. http://stackoverflow.com/questions/43072126/how-to-find-y-for-corresponding-x-values-implicit-function-complex-number/43072826?noredirect=1 und auch hier http: // stackoverflow. com/questions/43080688/algorithm-which-adapt-lösen-the-complex-equations-implicit-function-fx-y Vielen Dank im Voraus. – user3815508

Verwandte Themen