Алгебраическая кривая - это некое «1D подмножество» «2D-плоскости», которое можно описать как набор нулей {(x,y) in R^2 : f(x,y)=0 }
полинома f
. Здесь мы рассматриваем 2D-плоскость как реальную плоскость R^2
, так что мы можем легко представить, как могла бы выглядеть такая кривая, в основном то, что можно нарисовать карандашом.
Примеры:
0 = x^2 + y^2 -1
круг радиуса 10 = x^2 + 2y^2 -1
эллипс0 = xy
крест форма, в основном , объединение оси абсцисс и ось ординат0 = y^2 - x
парабола0 = y^2 - (x^3 - x + 1)
эллиптической кривой0 = x^3 + y^3 - 3xy
лист Декарта0 = x^4 - (x^2 - y^2)
лемниската0 = (x^2 + y^2)^2 - (x^3 - 3xy^2)
трифолиум0 = (x^2 + y^2 - 1)^3 + 27x^2y^2
астроид
задача
Учитывая полином f
(как определено ниже) и диапазоны x / y, выведите черно-белое изображение размером не менее 100x100 пикселей, которое показывает кривую в виде черной линии на белом фоне.
Детали
Цвет : Вы можете использовать любые два других цвета по вашему выбору, их будет легко отличить друг от друга.
Сюжет : вместо пиксельного изображения вы также можете вывести это изображение как ascii-art, где фоновые «пиксели» должны быть пробелом / подчеркиванием или другим символом, который «выглядит пустым», а линия может быть сделана из символа, который выглядит » полный "нравится M
или X
или #
.
Вам не нужно беспокоиться о псевдонимах.
Вам нужно только построить линии, в которых знак полинома меняется с одной стороны линии на другую (это означает, что вы можете, например, использовать алгоритм квадрата шествия), вам не нужно правильно изображать «патологические случаи, например, 0 = x^2
когда знак меняет». не меняется при переходе с одной стороны линии на другую, но линия должна быть непрерывной и разделяющей области разных признаков f(x,y)
.
Полиномиальной : Полином задаются в виде (m+1) x (n+1)
матрицы / список списков (действительные) коэффициентов, в примере ниже терминов коэффициентов приведены в своей позиции:
[ 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]
Если вы предпочитаете, вы можете считать матрицу квадратной (что всегда можно сделать с необходимым заполнением нулями), и, если хотите, вы также можете предположить, что размер матрицы указан в качестве дополнительных входных данных.
Далее приведенные выше примеры представлены в виде матрицы, определенной следующим образом:
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]
Тестовые случаи с x-range / y-range:
(В не очень удобочитаемом, но лучше копируемо-способном формате, доступном здесь, на 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]
У меня есть вдохновение для некоторых кривых из этого PDF.
m
х n
, а (m+1)
х (n+1)
. Что мы берем в качестве входных данных: m, n
или m+1,n+1
? Или мы можем выбрать?