Une courbe algébrique est un certain "sous-ensemble 1D" du "plan 2D" qui peut être décrit comme un ensemble de zéros {(x,y) in R^2 : f(x,y)=0 }
d'un polynôme f
. Ici, nous considérons le plan 2D comme le vrai plan de R^2
sorte que nous pouvons facilement imaginer à quoi pourrait ressembler une telle courbe, essentiellement une chose que vous pouvez dessiner avec un crayon.
Exemples:
0 = x^2 + y^2 -1
un cercle de rayon 10 = x^2 + 2y^2 -1
une ellipse0 = xy
une forme de croix , essentiellement l'union de l'axe des x et de l'axe des y0 = y^2 - x
une parabole0 = y^2 - (x^3 - x + 1)
une courbe elliptique0 = x^3 + y^3 - 3xy
le folium de Descartes0 = x^4 - (x^2 - y^2)
un lemniscate0 = (x^2 + y^2)^2 - (x^3 - 3xy^2)
un trifolium0 = (x^2 + y^2 - 1)^3 + 27x^2y^2
un astroïde
Tâche
Étant donné un polynôme f
(tel que défini ci-dessous) et les gammes x / y, produire une image en noir et blanc d'au moins 100x100 pixels qui montre la courbe sous forme de ligne noire sur fond blanc.
Détails
Couleur : Vous pouvez utiliser deux autres couleurs de votre choix, il devrait être facile de les distinguer.
Graphique : Au lieu d'une image en pixels, vous pouvez également produire cette image en tant qu'ascii-art, où les "pixels" d'arrière-plan doivent être des espaces / soulignements ou un autre caractère qui "semble vide" et la ligne peut être faite d'un caractère qui ressemble " plein "comme M
ou X
ou #
.
Vous n'avez pas à vous soucier de l'alias.
Vous avez seulement besoin de tracer des lignes où le signe du polynôme change d'un côté à l'autre de la ligne (cela signifie que vous pouvez par exemple utiliser l'algorithme du carré de marche), vous n'avez pas à tracer correctement "les cas pathologiques comme 0 = x^2
où le signe fait ne pas changer en allant d'un côté à l'autre de la ligne. Mais la ligne doit être continue et séparer les régions des différents signes de f(x,y)
.
Polynôme : Le polynôme est donné sous forme de (m+1) x (n+1)
matrice / liste de listes de coefficients (réels), dans l'exemple ci-dessous les termes des coefficients sont donnés dans leur position:
[ 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]
Si vous préférez, vous pouvez supposer que la matrice est carrée (ce qui peut toujours être fait avec le remplissage nul nécessaire), et si vous le souhaitez, vous pouvez également supposer que la taille de la matrice est donnée comme entrées supplémentaires.
Dans ce qui suit, les exemples ci-dessus sont représentés comme une matrice définie comme ceci:
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]
Cas de test avec plage x / plage y:
(Dans un format pas tellement lisible mais meilleur copier-coller disponible ici sur pastebin .)
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]
J'ai eu l'inspiration pour quelques courbes de ce pdf.
m
x n
, mais (m+1)
x (n+1)
. Que prenons-nous comme entrée:, m, n
ou m+1,n+1
? Ou pouvons-nous choisir?