Kurva aljabar adalah "subset 1D" tertentu dari "bidang-2D" yang dapat digambarkan sebagai seperangkat nol {(x,y) in R^2 : f(x,y)=0 }
dari polinomial f
. Di sini kita menganggap bidang 2D sebagai bidang nyata R^2
sehingga kita dapat dengan mudah membayangkan seperti apa bentuk kurva itu, pada dasarnya benda yang bisa Anda gambar dengan pensil.
Contoh:
0 = x^2 + y^2 -1
lingkaran jari-jari 10 = x^2 + 2y^2 -1
sebuah elips0 = xy
sebuah salib bentuk, pada dasarnya persatuan sumbu x dan sumbu y0 = y^2 - x
sebuah parabola0 = y^2 - (x^3 - x + 1)
sebuah kurva eliptik0 = x^3 + y^3 - 3xy
folium dari Descartes0 = x^4 - (x^2 - y^2)
sebuah lemniscate0 = (x^2 + y^2)^2 - (x^3 - 3xy^2)
sebuah trifolium0 = (x^2 + y^2 - 1)^3 + 27x^2y^2
astroid
Tugas
Diberikan polinomial f
(seperti yang didefinisikan di bawah), dan rentang x / y, menghasilkan gambar hitam dan putih minimal 100x100 piksel yang menunjukkan kurva sebagai garis hitam pada latar belakang putih.
Detail
Warna : Anda dapat menggunakan dua warna lain pilihan Anda, seharusnya mudah membedakannya.
Plot : Alih-alih gambar piksel Anda juga dapat menampilkan gambar ini sebagai ascii-art, di mana latar belakang "piksel" harus spasi / garis bawah atau karakter lain yang "terlihat kosong" dan garis dapat dibuat dari karakter yang terlihat " penuh "suka M
atau X
atau #
.
Anda tidak perlu khawatir tentang aliasing.
Anda hanya perlu memplot garis di mana tanda perubahan polinomial dari satu sisi garis ke yang lain (itu berarti Anda bisa misalnya menggunakan algoritma marching square), Anda tidak perlu memplot dengan benar "kasus patologis seperti di 0 = x^2
mana tanda tidak tidak berubah ketika pergi dari satu sisi garis ke yang lain. Tapi garis harus kontinu dan memisahkan wilayah dari tanda - tanda yang berbeda f(x,y)
.
Polinomial : Polinomial diberikan sebagai (m+1) x (n+1)
matriks / daftar daftar koefisien (nyata), dalam contoh di bawah ini syarat-syarat koefisien diberikan dalam posisi mereka:
[ 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]
Jika Anda suka, Anda dapat mengasumsikan matriks menjadi kuadrat (yang selalu dapat dilakukan dengan zero-padding yang diperlukan), dan jika Anda mau, Anda juga dapat mengasumsikan bahwa ukuran matriks diberikan sebagai input tambahan.
Berikut ini, contoh-contoh dari atas direpresentasikan sebagai matriks yang didefinisikan seperti ini:
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]
Uji kasus dengan kisaran x / rentang y:
(Dalam format yang tidak begitu mudah dibaca tetapi lebih baik salin-tempel tersedia di sini di 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]
Saya mendapatkan inspirasi untuk beberapa kurva dari pdf ini.
m
x n
, tetapi (m+1)
x (n+1)
. Apa yang kita ambil sebagai masukan:, m, n
atau m+1,n+1
? Atau bisakah kita memilih?