Jahitan Kurva

8

Jahitan kurva adalah proses "menjahit" bersama-sama beberapa garis lurus untuk membuat kurva, seperti:

Imgur

Untuk penjelasan tentang penjahitan kurva, kunjungi situs web ini .

Kami akan menggambar kurva kami di kiri atas layar, seperti yang ditunjukkan pada gambar di atas.

Diberikan bilangan bulat n(melalui STDIN atau parameter fungsi), menjadi jumlah garis untuk menggambar, dan ppiksel bilangan bulat , menjadi interval antara titik awal, menggambar kurva garis lurus.

Garis horizontal / vertikal diperlukan, dan harus menjadi bagian dari jumlah garis.


Contoh Keluaran:

n = 25, p = 15

Imgur

n = 20, p = 20

Imgur


Ini adalah tantangan , sehingga kode terpendek menang .

James Williams
sumber
Oh ya! D'oh ...
James Williams
Kurva sebenarnya adalah parabola. Saya tidak ingat di mana saya membaca itu. Jika saya seorang pedant, saya akan menunjukkan bahwa itu bukan "kurva garis lurus" tetapi perkiraan kurva yang dibangun dari garis lurus :-)
Level River St
@ Martin Yup, piksel.
James Williams
@ Martin Garis horizontal seharusnya tidak diperlukan, karena perbatasan jendela akan membentuk garis.
James Williams
2
Oh, dayum saya biasa melakukan ini untuk bersenang-senang ketika bosan di kelas ... tidak tahu orang lain telah melakukan hal yang sama persis!
Claudiu

Jawaban:

5

Mathematica, 55 51 50 47 64 68 byte

f=Graphics[Line@Table[#2{{i-1,#+1},{0,i+1}},{i,#}],ImageSize->#*#2]&

Menentukan fungsi yang menghasilkan gambar seperti ditentukan saat dipanggil suka

f[25,15]

Menghasilkan

masukkan deskripsi gambar di sini

Sunting : Harus menambahkan beberapa karakter untuk memastikan bahwa parameter kedua benar-benar ditafsirkan sebagai piksel.

Sunting : empat byte lagi untuk memplot garis horizontal.

Martin Ender
sumber
4

Python - 74

Karena pertanyaannya tidak menentukan satuan, penskalaan sumbu dll. Saya datang dengan solusi minimum berikut:

import pylab
n,p=input()
for i in range(n):pylab.plot([0,i*p],[(i-n)*p,0])

masukkan deskripsi gambar di sini

Falko
sumber
Mengabaikan unit dan penskalaan sumbu, solusi minimum menyimpan empat karakter dengan menghilangkan *p;). juga, apakah Anda yakin tidak menambahkan garis horizontal dan / atau vertikal? mereka tidak dalam contoh output. akhirnya, saya perhatikan di saya, bahwa lebih pendek untuk mengimbangi koordinat pertama secara horizontal daripada yang kedua (karena Anda dapat menyimpan -dan kurung)
Martin Ender
2
(Pertanyaannya tidak menentukan satuan sebagai piksel sekarang, btw.)
Martin Ender
3

Bash + Imagemagick + xview, 124 byte

for((;i<$1;));{
s+=" -draw 'line $[i*$2],0 0,$[($1-i++)*$2]'"
}
eval convert -size $[$1*$2]x$[$1*$2] xc:$s png:-|xview stdin

Output untuk ./curvestitch.sh 25 15:

masukkan deskripsi gambar di sini

Trauma Digital
sumber
Yay untuk meluap-luap panjang baris perintah maksimum jika Anda tidak hati-hati. Nice one
tommeding
2

Perl, 121 130 byte

Masukan melalui STDIN. Nilai dipisahkan koma.

EDIT: Kami punya aturan baru. Saya tidak yakin mengapa, tetapi dua piksel pertama tidak terlihat dan saya harus menambahkan offset ...

use Tk;<>=~/,/;$c=tkinit->Canvas(-width=>$w=$`*$'-$',-height=>$w)->pack;$c->createLine(2,2+$_*$',2+$w-$_*$',2)for 0..~-$`;MainLoop

Berikut ini beberapa tes:

25x15:

25x15

6x72:

6x72

core1024
sumber
2

BBC Basic, 58 karakter ascii, ukuran file yang dibatasi 49

INPUTn,p:p*=2FORi=1TOn:MOVEi*p-p,974DRAW0,974-(n-i)*p:NEXT

Unduh emulator di http://www.bbcbasic.co.uk/bbcwin/bbcwin.html

p*=2 diperlukan karena dalam mode default BBC Basic memetakan kotak logis 2x2 ke satu piksel fisik.

BBC Basic memiliki asal di sudut kiri bawah layar, dengan Anda bersama naik. Di komputer saya, jendela default memiliki koordinat y atas 974 (Anda mungkin berbeda.) 7 karakter dapat disimpan jika diizinkan untuk merencanakan di sudut kiri bawah layar. Menambahkan MODE16setelah yang pertama :akan mengubah ukuran jendela sehingga koordinat y atas dijamin menjadi 799.

masukkan deskripsi gambar di sini

Level River St
sumber
Ini dengan cepat menjadi bahasa golf yang berbahaya. CJam siapa?
Soham Chowdhury
1

Html + JavaScript 155 157 183

Edit: learnig hal-hal apa yang dapat saya potong tanpa kehilangan fungsionalitas.
Edit 2: seperti yang disarankan oleh @Optimizer

<canvas id='c'/><script>
p=prompt,s=p(l=p(t=c.getContext("2d")));for(c.width=c.height=y=s*l,x=0;l--;x-=s)t.moveTo(0,y-=s),t.lineTo(-x,0);t.stroke()
</script>

Fiddle Jumlah input baris pertama , interval input pixel kedua

Biola yang Tidak Dikunci

edc65
sumber
l = p (s = p (t = c.getContext ("2d")))
Pengoptimal
@ Opptizer Saya pikir saya perlu mengatur lebar dan tinggi sebelum mendapatkan konteks
edc65
1
Tidak, ini berfungsi: jsfiddle.net/6ke43m7c/10
Pengoptimal