Eine algebraische Kurve ist eine bestimmte "1D-Teilmenge" der "2D-Ebene", die als Nullmenge {(x,y) in R^2 : f(x,y)=0 }
eines Polynoms beschrieben werden kann f
. Hier betrachten wir die 2D-Ebene als die reale Ebene, R^2
so dass wir uns leicht vorstellen können, wie eine solche Kurve aussehen könnte, im Grunde eine Sache, die Sie mit einem Bleistift zeichnen können.
Beispiele:
0 = x^2 + y^2 -1
ein Kreis mit Radius 10 = x^2 + 2y^2 -1
eine Ellipse0 = xy
eine Kreuzform, im Allgemeinen der Vereinigung der x-Achse und die y-Achse0 = y^2 - x
eine Parabel0 = y^2 - (x^3 - x + 1)
eine elliptische Kurve0 = x^3 + y^3 - 3xy
das Folium von Descartes0 = x^4 - (x^2 - y^2)
eine Lemniskate0 = (x^2 + y^2)^2 - (x^3 - 3xy^2)
ein Trifolium0 = (x^2 + y^2 - 1)^3 + 27x^2y^2
ein Astroid
Aufgabe
Ausgehend von einem Polynom f
(wie unten definiert) und den x / y-Bereichen wird ein Schwarzweißbild mit mindestens 100 x 100 Pixeln ausgegeben, das die Kurve als schwarze Linie auf weißem Hintergrund darstellt.
Einzelheiten
Farbe : Sie können zwei beliebige andere Farben Ihrer Wahl verwenden. Es sollte einfach sein, sie voneinander zu unterscheiden.
Plot : Anstelle eines Pixelbildes können Sie dieses Bild auch als ASCII-Grafik ausgeben, wobei der Hintergrund "Pixel" ein Leerzeichen / Unterstrich oder ein anderes Zeichen sein sollte, das "leer aussieht", und die Linie kann aus einem Zeichen bestehen, das aussieht. " voll "wie M
oder X
oder #
.
Sie müssen sich nicht um Aliasing kümmern.
Sie nur zu Plotlinien müssen , wo das Vorzeichen der Polynom ändert sich von einer Seite der Linie zum anderen (das heißt Sie zB den Marsch - Square - Algorithmus verwenden könnte), die Sie nicht richtig geplottet müssen „pathologische Fälle wie , 0 = x^2
wo das Zeichen tut ändert sich nicht , wenn man von einer Seite der Linie zur anderen geht, aber die Linie sollte durchgehend sein und die Bereiche der verschiedenen Zeichen von f(x,y)
.
Polynom : Das Polynom wird als (m+1) x (n+1)
Matrix / Liste von Listen von (reellen) Koeffizienten angegeben. Im folgenden Beispiel werden die Begriffe der Koeffizienten in ihrer Position angegeben:
[ 1 * 1, 1 * x, 1 * x^2, 1 * x^3, ... , 1 * x^n ]
[ y * 1, y * x, y * x^2, y * x^4, ... , y * x^n ]
[ ... , ... , ... , ... , ... , ... ]
[ y^m * 1, y^m * x, y^m * x^2, y^m * x^3 , ..., y^m * x^n]
Wenn Sie möchten, können Sie davon ausgehen, dass die Matrix quadratisch ist (dies kann immer mit dem erforderlichen Nullabstand erfolgen), und wenn Sie möchten, können Sie auch davon ausgehen, dass die Größe der Matrix als zusätzliche Eingabe angegeben wird.
Die obigen Beispiele werden im Folgenden als eine wie folgt definierte Matrix dargestellt:
Circle: Ellipse: Parabola: Cross: Elliptic Curve: e.t.c
[-1, 0, 1] [-1, 0, 1] [ 0,-1] [ 0, 0] [-1, 1, 0,-1]
[ 0, 0, 0] [ 0, 0, 0] [ 0, 0] [ 0, 1] [ 0, 0, 0, 0]
[ 1, 0, 0] [ 2, 0, 0] [ 1, 0] [ 1, 0, 0, 0]
Testfälle mit x-Bereich / y-Bereich:
(In einem nicht so lesbaren, aber besser kopierbaren Format, das hier im Pastebin verfügbar ist .)
Circle:
[-1, 0, 1] [-2,2] [-2,2]
[ 0, 0, 0]
[ 1, 0, 0]
Ellipse:
[-1, 0, 1] [-2,2] [-1,1]
[ 0, 0, 0]
[ 2, 0, 0]
Cross:
[ 0, 0] [-1,2] [-2,1]
[ 0, 1]
Parabola:
[ 0,-1] [-1,3] [-2,2]
[ 0, 0]
[ 1, 0]
Elliptic Curve:
[-1, 1, 0,-1] [-2,2] [-3,3]
[ 0, 0, 0, 0]
[ 1, 0, 0, 0]
Folium of Descartes:
[ 0, 0, 0, 1] [-3,3] [-3,3]
[ 0, -3, 0, 0]
[ 0, 0, 0, 0]
[ 1, 0, 0, 0]
Lemniscate:
[ 0, 0, -1, 0, 1] [-2,2] [-1,1]
[ 0, 0, 0, 0, 0]
[ 1, 0, 0, 0, 0]
Trifolium:
[ 0, 0, 0,-1, 1] [-1,1] [-1,1]
[ 0, 0, 0, 0, 0]
[ 0, 3, 2, 0, 0]
[ 0, 0, 0, 0, 0]
[ 1, 0, 0, 0, 0]
Astroid:
[ -1, 0, 3, 0, -3, 0, 1] [-1,1] [-1,1]
[ 0, 0, 0, 0, 0, 0, 0]
[ 3, 0, 21, 0, 3, 0, 0]
[ 0, 0, 0, 0, 0, 0, 0]
[ -3, 0, 3, 0, 0, 0, 0]
[ 0, 0, 0, 0, 0, 0, 0]
[ 1, 0, 0, 0, 0, 0, 0]
Ich habe die Inspiration für einige Kurven aus diesem PDF.
m
x n
, sondern (m+1)
x (n+1)
. Was nehmen wir als Eingabe: m, n
oder m+1,n+1
? Oder können wir wählen?