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^2sorte 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 -1un cercle de rayon 10 = x^2 + 2y^2 -1une ellipse0 = xyune forme de croix , essentiellement l'union de l'axe des x et de l'axe des y0 = y^2 - xune parabole0 = y^2 - (x^3 - x + 1)une courbe elliptique0 = x^3 + y^3 - 3xyle 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^2un 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 Mou Xou #.
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^2où 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.
mx n, mais (m+1)x (n+1). Que prenons-nous comme entrée:, m, nou m+1,n+1? Ou pouvons-nous choisir?



