Gambar tanda €


61

Tujuannya adalah untuk menampilkan atau menampilkan gambar dengan tanda € (euro) sesuai dengan spesifikasi berikut (mengabaikan batas tanda).

€ tanda

Sumber: http://en.wikipedia.org/wiki/File:Euro_Construction.svg

Aturan:

  • Program / skrip harus mengambil ketinggian piksel masuk sebagai argumen (ruang kosong di sekitar tanda opsional)
  • The tanda tidak dapat ditarik sebagai atau dari karakter, langsung (itu dilarang untuk printyang di gambar) atau tidak langsung (menghitung 8364kemudian menampilkan di halaman HTML)
  • Output tidak perlu disimpan ke file apa pun, dapat ditampilkan kemudian hanya ditampilkan sebagai tangkapan layar
  • "Celah" standar dilarang
  • Kode terpendek menang

7
Rumit! Saatnya untuk meninjau geometri / trigonometri saya. Saya melihat beberapa koordinat yang cukup sulit untuk disimpulkan.
Michael M.

5
Saya harus mencari "fakultatif"
Digital Trauma

2
Saya benar-benar berharap untuk jawaban LaTeX + TikZ :)
Cole Johnson

12
Tanpa Euro, masalah ini tidak akan ada, dengan demikian sekali lagi menunjukkan kebenaran "masalah uang Mo"
Thomas Johnson

1
Saya tidak tahu apa yang bisa digunakan secara tipografi dan saya bukan tipografi. Jika Anda ingin tanda € yang sempurna, cukup gunakan karakter €. Tapi itu bukan tujuan dari pertanyaan ini. Saya tidak mengharapkan gambar pixel sempurna. Jangan ragu untuk menambahkan pertanyaan lain dengan aturan yang berbeda jika Anda tidak suka yang ini.
AL

Jawaban:


22

PostScript / GhostScript, 100

(96 untuk program, 4 untuk awalan saklar-baris perintah)

Sepenuhnya golf dan tanda tangan:

$ hexdump -C euro.ps
00000000  68 20 88 78 92 36 92 38  92 8b 88 4b 88 3c 92 ad  |h .x.6.8...K.<..|
00000010  88 00 88 00 88 3c 88 2d  88 ce 92 05 88 00 88 00  |.....<.-........|
00000020  88 32 88 d8 88 28 92 06  92 16 88 b9 88 fb 92 6b  |.2...(.........k|
00000030  88 b5 88 f1 92 63 88 13  88 f1 92 63 88 17 88 fb  |.....c.....c....|
00000040  92 63 92 16 88 b9 88 0f  92 6b 88 b5 88 05 92 63  |.c.......k.....c|
00000050  88 1b 88 05 92 63 88 1f  88 0f 92 63 92 16 92 42  |.....c.....c...B|
00000060

Anda bisa mendapatkan salinannya di sini , untuk dilihat sendiri.

Setelah melihat jawaban @ ThomasW, dan mempertimbangkan program saya dengan hati-hati, saya menyadari bahwa saya dapat melakukannya dengan lebih baik.

Versi tokenized sama dengan ini:

h 120 div dup scale
75 60 translate

0 0 60 45 -50 arc
0 0 50 -40 40 arcn
closepath

-71 -5 moveto
-75 -15 lineto
19 -15 lineto
23 -5 lineto
closepath

-71 15 moveto
-75 5 lineto
27 5 lineto
31 15 lineto
closepath

fill

Penjelasan tentang optimasi:

Pertama, saya mengubah solusi pertama saya menjadi penyatuan beberapa subpath sederhana, daripada satu jalur membatasi seluruh hal. Saya meminjam metode Thomas memasukkan parameter, yang jauh lebih baik daripada yang saya miliki.

Lalu saya mengalikan semua koordinat dengan 10 dan membulatkan segalanya untuk memberi saya hanya koordinat bilangan bulat. Saya juga membulatkan sudut, dan mengubah dua yang besar menjadi sudut negatif yang setara. Ini dengan mudah membuat setiap angka jatuh antara -128 dan 127.

Dan kemudian saya token semua . Setiap operator dapat direpresentasikan dengan urutan dua byte. Dan karena setiap angka dapat diwakili oleh satu byte yang ditandatangani, masing-masing juga menjadi hanya dua byte. Satu-satunya bagian yang saya tidak bisa lakukan dengan itu adalah hdi awal, tetapi juga hanya dua byte, hanya ruang hdan setelahnya.

Jalankan sebagai:

gs -dh=200 euro.ps

200 pt tinggi

gs -dh=80 euro.ps

Tinggi 80 pt

gs -dh=20 euro.ps

20 pt tinggi


Baru: Versi lebih pendek!

Menggunakan jalur pengguna yang disandikan, saya telah berhasil mengurangi ukuran program dengan beberapa byte. Masing-masing program ini setara dengan yang pertama, menghasilkan output yang identik:

92 byte:

hexdump -C euro.ps
00000000  68 20 88 78 92 36 92 38  92 8b 88 4b 88 3c 92 ad  |h .x.6.8...K.<..|
00000010  7b 7b 88 b5 88 c4 88 2d  88 3c 30 20 30 88 3c 88  |{{.....-.<0 0.<.|
00000020  2d 88 cf 30 20 30 88 32  88 d8 88 28 88 b9 88 fb  |-..0 0.2...(....|
00000030  88 b5 88 f1 88 13 88 f1  88 17 88 fb 88 b9 88 0f  |................|
00000040  88 b5 35 88 1b 35 88 1f  88 0f 7d 8e 0b 00 07 08  |..5..5....}.....|
00000050  0a 01 23 03 0a 01 23 03  0a 7d 92 b3              |..#...#..}..|
0000005c

Yang setara dengan:

h 120 div dup scale
75 60 translate
{
 {-75 -60 45 60
  0 0 60 45 -50
  0 0 50 -40 40
  -71 -5
  -75 -15
  19 -15
  23 -5
  -71 15
  -75 5
  27 5
  31 15}
  <00 07 08 0A 01 03 03 03 0A 01 03 03 03 0A> 
} ufill

Dan solusi membingungkan yang sedikit berlawanan menghemat satu karakter lagi, hanya untuk 91:

$ hexdump -C euro.ps
00000000  68 20 88 78 92 36 92 38  92 8b 88 4b 88 3c 92 ad  |h .x.6.8...K.<..|
00000010  5b 5b 8e 1e b5 c4 2d 3c  00 00 3c 2d ce 00 00 32  |[[....-<..<-...2|
00000020  d8 28 b9 fb b5 f1 13 f1  17 fb b9 0f b5 05 1b 05  |.(..............|
00000030  1f 0f 7b 92 38 88 7f 92  50 7b 32 35 36 92 a9 7d  |..{.8...P{256..}|
00000040  92 54 7d 92 49 5d 92 32  8e 0b 00 07 08 0a 01 23  |.T}.I].2.......#|
00000050  03 0a 01 23 03 0a 5d 92  32 92 b3                 |...#..].2..|
0000005b

Yang setara dengan:

h 120 div dup scale
75 60 translate
[
  [
   <b5 c4 2d 3c
    00 00 3c 2d ce
    00 00 32 d8 28
    b9 fb
    b5 f1
    13 f1
    17 fb
    b9 0f
    b5 05
    1b 05
    1f 0f> {dup 127 gt {256 sub} if} forall 
  ] cvx
  <00 07 08 0A 01 23 03 0A 01 23 03 0A> 
] cvx
ufill

1
Kerja bagus! Saya kira saya harus mempelajari semua tentang token biner.
Thomas W.

@ Thomas. Meskipun saya belum sepenuhnya selesai; Saya masih membaca dokumentasi string path yang dikodekan ...
AJMansfield

Anda tidak perlu spasi setelahnya hkarena token biner membatasi diri. BTW, bagaimana Anda mengkodekannya? Saya melakukannya dengan editor hex standar, yang membosankan.
Thomas W.

2
@ n.1 file tokenized bekerja persis sama dengan file PostScript biasa, dan Anda bahkan dapat mencampur token biner dan plainteks standar PostScript dalam file yang sama. Setiap token biner berhubungan langsung dengan operator atau objek lain, sehingga Anda dapat dengan mudah mengganti atau menyisipkan operasi, atau bahkan menyalin cuplikan ke program lain. Rincian persis tentang formulir tokenized dapat ditemukan di Manual Referensi Bahasa PostScript (buku merah) di bagian 3.12. Jalur pengguna yang dikodekan dijelaskan dalam 4.6.2.
AJMansfield

1
@ n.1 Saya menggunakan hex editor untuk menulis file, untuk alasan itu. Byte delimiter byte biasanya sesuai dengan karakter kontrol dalam ISO-latin-1 dan encoding lebar-tetap lainnya, tetapi jika editor menafsirkannya dalam UTF-8 atau encoding lebar variabel lain, Anda akan mendapatkan hal-hal seperti itu, sama dengan setiap file lain yang menyertakan data biner.
AJMansfield

50

Mathematica, 193 183 177 173 169 166 byte

Yay, matematika! Saya merencanakan wilayah yang memenuhi serangkaian ketidaksetaraan tertentu (agak rumit):

e=RegionPlot[(1<Abs@y<3||c)&&{x,y+12}.(d=2{-5Sin@40°-6,m=5Cos@40°})*{x+15,y+1-2Sign@y}.d<0||c&&x<2m/.c->100<x^2+y^2<144,{x,-15,9},{y,-12,12},Frame->0>1,ImageSize->#]&

Penggunaannya adalah e[height], misalnya e[100]:

masukkan deskripsi gambar di sini

Atau e[200]:

masukkan deskripsi gambar di sini

Anda mungkin memperhatikan, bahwa ujung yang lebih tajam sedikit membulat. Itu karena wilayah hanya dapat diplot dengan mengambil sampel titik-titik dalam ruang, dan Mathematica tidak mengambil sampel setiap piksel secara default. Resolusi pengambilan sampel dapat ditingkatkan dengan menambahkan opsi lain PlotPoints->#(yang menggunakan satu sampel per piksel), yang menambahkan 14 karakter . Saya tidak merekomendasikan menjalankannya dengan opsi itu, karena secara signifikan meningkatkan runtime dan hampir tidak meningkatkan daya tarik visual di luar #/4atau lebih. Oleh karena itu, (setelah persetujuan OP) itu tidak termasuk dalam skor.

Berikut ini adalah versi yang sedikit tidak diubah:

e[height_] := (
  angle = 40°;
  d = {-5 Sin[angle] - 6, 5 Cos[angle]};
  RegionPlot[
      (Abs[y] > .5 && Abs[y] < 1.5
        ||
       r > 25 && r < 36)
    &&
      {x, y + 6}.d > 0
    &&
      {x + 7.5, y + .5 - Sign[y]}.d < 0
    ||
      r > 25 && r < 36 && x < 5 Cos[angle] 
    /. r -> x^2 + y^2
    ,
    {x, -7.5, 4.5},
    {y, -6, 6},
    Frame -> False,
    ImageSize -> height
  ]
);

Perhatikan bahwa dalam versi golf, saya telah menskala sistem koordinat dengan faktor 2 untuk menghindari angka .5s, tetapi ternyata jumlah karakter sebenarnya identik.

Berikut ini adalah penjelasan bagaimana saya menyusun formula. Saya membagi bentuk menjadi dua wilayah. Satu berisi cincin dan garis-garis dan terpotong ke kanan dengan BCDElereng dan ke kiri dengan lereng IJdan GH(lebih lanjut tentang itu nanti). Yang lain berisi cincin yang sama, tetapi hanya terputus pada titik koordinat xD . Kondisi untuk kedua wilayah digabungkan dengan ||, yang bertindak sebagai kesatuan yang ditetapkan di sini.

Cincin hanya didefinisikan sebagai 5 < r < 6, di mana rjarak dari titik asal. lebih mudah untuk berolahraga ( x²+y²), jadi saya menggunakan 25 < x² + y² < 36untuk mendapatkan semua poin di atas ring.

Garis-garis antara ±.5dan ±1.5. Kita dapat menangani kedua garis pada saat yang sama, dengan mengambil modulus y , sehingga garis-garis (dengan panjang tak terbatas) terpenuhi .5 < |y| < 1.5. Sekali lagi, untuk mengambil penyatuan garis-garis dan cincin, saya hanya menggunakan ||.

Yang menarik mungkin adalah bagaimana cara mendapatkan "topeng" itu. Point Dmemiliki koordinat x5 cos 40° , jadi topeng yang merawat tepi bawah (hanya digabung dengan cincin) saja x < 5 cos 40°. Ini dapat diterapkan melalui persimpangan set yang diterjemahkan ke &&dalam logika.

Topeng lainnya adalah bagian yang sangat sulit. Pertama, mari kita dapatkan kemiringan BCDE. Kita dapat dengan mudah membangun poin Cdan D, seperti (0, -6)dan 5 (cos 40°, sin 40°), masing-masing. Vektor yang menunjuk pada garis adalah adil D - C = (5 cos 40°, 5 sin 40° + 6). Untuk menerapkan topeng di sebelah kanan, saya hanya perlu mencari tahu apakah suatu titik terletak di sebelah kiri atau kanan garis itu (mari kita panggil vektor garis p). Saya bisa memikirkan hal ini dengan mengambil vektor dari Ctitik saya menarik dan memproyeksikan itu ke vektor tegak lurus ke p. Tanda proyeksi akan memberi tahu saya titik yang dihidupkan. Memperoleh vektor tegak lurus cukup sederhana dalam 2D: membalikkan koordinat dan membalikkan tanda salah satunya. Itu variabel ddalam kode saya:(-5 sin 40° - 6, 5 cos 40°). Vektor dari Csuatu tempat tujuan q = (x, y)adalah q - C = (x, y + 6). Proyeksi hanyalah produk skalar (atau produk titik) antara qdan d. Cara saya memilih ditu kebetulan mengarah ke kiri, jadi saya mau d.(q-C) > 0. Kondisi ini berlaku topeng kanan.

Untuk topeng kiri saya pada dasarnya bisa menggunakan ide yang sama. Kemiringannya sama dan karenanya juga demikian d. Saya hanya perlu mengimbangi poin saya dari sudut kiri bawah garis daripada dari C. Mereka memiliki koordinat (-7.5, 0.5)(garis atas) dan (-7.5, -1.5)(garis bawah). Sehingga akan membutuhkan dua aturan independen untuk dua garis. Namun, perhatikan bahwa semua titik yang dipengaruhi oleh topeng bawah berada di garis bawah dan karenanya memiliki y negatif . Dan semua titik yang dipengaruhi oleh topeng atas memiliki y positif . Jadi saya bisa langsung mengganti offset saya menggunakan Sign[y]yang 1untuk positif dan -1negatif y. Jadi titik offset saya menjadi(-7.5, -0.5 + Sign[y]). Kalau tidak, topeng itu berfungsi seperti topeng kanan. Tentu saja, proyeksi kali ini harus negatif. Jadi, secara naif itu akan menjadi sesuatu seperti RH-projection > 0 && LH-projection < 0(yang juga merupakan kode asli saya). Tetapi kita dapat mempersingkat ini, karena mengalikan angka positif dan negatif harus memberikan angka negatif, jadi itu hanya RH * LH < 0(di mana RHdan LHmerupakan proyeksi masing-masing).

Itu dia. Menyatukan semuanya mengarah ke struktur logis berikut:

(
  (is_in_circle || is_in_stripe)
  &&
  is_between_left_and_right_mask
)
||
(
  is_in_circle && left_of_edge
)

Untuk lebih jelasnya, koordinat dalam penjelasan saya merujuk pada diagram konstruksi yang diberikan dalam tantangan. Seperti yang disebutkan di atas, kode saya benar-benar mengalikan semuanya dengan 2- saya mengubahnya untuk menyimpan byte, tetapi jumlah byte sebenarnya identik, dan saya tidak bisa repot-repot mengembalikan perubahan lagi. Bilangan bulat juga terlihat lebih bagus.


1
Saya relatif baru di Mathematica, jadi saya menghargai beberapa komentar pada kode Anda!
Thomas W.

2
@ Thomas. baik, hal-hal Mathematica yang sebenarnya hanyalah panggilan RegionPlotyang hanya warna di semua titik dalam ruang yang memenuhi kondisi tertentu. Jadi memberi itu x^2+y^2<1akan menggambar lingkaran satuan. Saya akan menambahkan penjelasan untuk matematika yang sebenarnya (nanti malam).
Martin Ender

1
Berapa panjang kode dengan tepi tidak membulat? Saya pikir Anda memiliki kode terpendek saat ini, tetapi saya tidak dapat menerima jawaban Anda dengan sudut bulat, itu tidak adil untuk jawaban lain yang tidak memiliki sudut bulat. Harap patuhi spesifikasinya. Terima kasih
AL

@ n.1 Kecuali jika Anda mendiskualifikasi jawaban PostScript Thomas W., karena biner atau karena dibulatkan terlalu agresif, jawabannya pasti lebih pendek. Namun, memperbaiki resolusi membutuhkan 14 karakter, jadi jawaban saya masih terpendek setelah itu. Saya akan mengedit.
Martin Ender

1
@ Thomas. ini dia!
Martin Ender

29

BBC BASIC, 202

INPUTh:w=h/12s=w/2.4p=25VDU22,6,29,640;400;p,4,0;1.5*w;p,153,6*w;0;p,4,0;1.5*w;p,159,h/3.1;4.7*w;p;9*s;9*w;p,87,h/3.1;-19*w;p,4,-7.5*w;0;p;s;w;p,85,4.5*s;0;p,81,s;w;p;s;w;p;s;w;p,85,-7.5*w;2*w;p,81,s;w;

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

Di BBC basic, semua gambar ditangani pada level rendah menggunakan karakter kontrol ASCII khusus mesin (tetapi beberapa perintah level tinggi juga tersedia untuk yang umum untuk kenyamanan.) Yang digunakan di sini adalah 22 (ubah mode tampilan) 29 (ubah asal) dan 25, setara dengan pernyataan PLOT, yang mengambil parameter tindakan tambahan (menggambar garis, lingkaran, segitiga, dll. di latar belakang / latar depan dengan gerakan relatif / absolut) sebelum parameter X dan Y.

Jadi yang harus saya lakukan adalah mengirim banyak karakter ke VDU controller. nilai yang diakhiri dalam titik koma adalah 16 bit. yang lain 8 bit. Jumlah total byte yang dikirim ke pengontrol VDU adalah 91 , meskipun itu sendiri tidak akan memenuhi syarat sebagai jawaban karena pada tahap itu ukurannya di-hardcode.

Tempat yang jelas untuk asal adalah pusat lingkaran, tetapi sebenarnya ada lebih banyak perintah yang terlibat dalam memproduksi palang. Jadi saya menggeser asal turun 1,5 ke bagian bawah bar yang lebih rendah, yang mengurangi jumlah fraksi dan angka negatif yang diperlukan. Tetap pada garis vertikal dengan pusat lingkaran, yang penting karena garis E dimulai dari garis vertikal ini.

Sebenarnya, saya hanya harus menghitung 3 angka dari gambar: sudut bagian dalam atas dari bentuk C (5 cos 40, 5 sin 40 + 1.5) = (3.8302,3.1394 + 1.5) = approx (12 / 3.1, 4.6) dan gradien garis E: x / y = 3,8302 / (6 + 3,1394) = 0,4157 = kira-kira 1 / 2,4

Karena saya hanya memiliki versi evaluasi gratis (ditafsirkan), saya menganggap tinggi simbol sebagai input pengguna. Jika Anda membeli versi lengkap (29.99GBP), Anda dapat mengkompilasi dan kemudian membaca baris perintah dengan w=VAL(@cmd$)/12.

Kode tidak dikunci

Dalam kode golf, hanya ada satu pernyataan VDU, tetapi dalam kode yang tidak disatukan saya memecahnya menjadi beberapa untuk kejelasan. Juga, karena dasar BBC sedikit endian, kombinasinya p,0,bisa di p;mainkan, tetapi saya membiarkannya tidak jernih untuk kejelasan.

  INPUT h
  w=h/12                   :REM w is the width of the line, which is 1/12 the height of the symbol, hardcoded at 900.
  s=w/2.4                  :REM s/w is the gradient x/y of line E. s is the horizontal offset of the top and bottom of the ends of horizontal bars
  p=25                     :REM VDU p,action,x;y; is the equivalent of PLOT action,x,y

  VDU 22,6                 :REM change mode
  VDU 29,640;400;          :REM set origin

  VDU p,4,0;1.5*w;         :REM move to centre of circle
  VDU p,153,6*w;0;         :REM draw circle in foreground colour
  VDU p,4,0;1.5*w;         :REM move to centre of circle
  VDU p,159,h/3.1;4.6*w;   :REM draw circle in background colour, ending at the upper inner point of the C shape.
  VDU p,0,9*s;9*w;         :REM move relative along slant gradient, 9 spaces in y direction, to define the upper cut on the circle
  VDU p,87,h/3.1;-19*w;    :REM draw triangle in background colour, based on the last two points and the absolute point specified here (vertical line for lower cut)

  VDU p,4,-7.5*w;0;        :REM move absolute to bottom left of lower bar
  VDU p,0,s;w;             :REM move relative to top left of lower bar
  VDU p,85,4.5*s;0;        :REM draw triangle to bottom right corner of lower bar (absolute)
  VDU p,81,s;w;            :REM draw triangle to top right of lower bar (relative)

  VDU p,0,s;w;             :REM move relative to bottom right of upper bar
  VDU p,0,s;w;             :REM move relative to top right of upper bar
  VDU p,85,-7.5*w;2*w;     :REM draw triangle to bottom left of upper bar (absolute)
  VDU p,81,s;w;            :REM draw triangle to top left of upper bar (relative)

masukkan deskripsi gambar di sini


BBC BASIC. Luar biasa! Ini membawa saya kembali hampir tiga puluh tahun!
Tom Chantler

1
@Domer BBC Basic pertama kali dirilis pada tahun 1981, lebih dari 20 tahun sebelum uang kertas Euro pertama dicetak (2002). Jadi ini adalah satu-satunya cara Anda bisa menggambar tanda euro besar pada mesin seperti itu! Atau Anda bisa mendefinisikan karakter ASCII nuntuk simbol euro dengan bitmap 8x8, seperti ini: VDU 23,n,30,33,120,32,120,30,30,0. Menurut Wikipedia, BBC Basic masih dikembangkan, terutama untuk perangkat seluler.
Level River St

Memang! Saya pikir kami mendapatkan milik kami pada tahun 1984. Saya ingat menggambar sprite keren di kertas grafik dan kemudian mengerjakan representasi biner mereka, karena saya yakin Anda juga pernah melakukannya. Pada catatan yang mana, saya baru menggambar simbol Euro Anda dengan tangan. Sangat bagus sekali kesalahan ketik diperbaiki dan nilai antepenultimasinya berubah dari 30 menjadi 33. Saya melihat dari profil Anda, Anda juga menggunakan LOGO yang lagi-lagi membawa saya kembali ke masa sekolah dasar saya. Sangat menyenangkan mengetahui bahwa BBC Basic masih digunakan sampai sekarang. Jika itu cukup baik untuk kita ...
Tom Chantler

Sebagai tambahan, bitmap BBC Basic 8x8 dapat dibuat lebih "miring" (sesuai dengan logo yang lebih besar) dengan mengubahnya VDU 23,n,30,33,124,32,120,33,30,0. Terima kasih untuk perjalanan ke jalur memori.
Tom Chantler

25

HTML, 250 249 248 242 244 234 229

<svg viewBox=-7.5,-6,12,12
onload=this.style.height=prompt()><clipPath
id=c><path
d=M5-6,1.8,1.5,3.8,3.2V6H-9.4L-7.1,.5-7.5-.5-5.2-6>
</clipPath><g
clip-path=url(#c) fill=none stroke=#000><circle
r=5.5 /><path
d=M-8,1h15M-8-1h15>

Meskipun ini hanya menggunakan hal-hal SVG, itu sangat bergantung pada penguraian HTML yang lemah dan harus disajikan sebagai HTML. SVG yang ketat akan membutuhkan lebih banyak byte.

Cobalah!


13
(-: ǝɯ oʇ ǝuıɟ sʞoo⅂
squeamish ossifrage

1
Ya, saya berpikir dalam koordinat PostScript, yang sebaliknya! Tukar sumbu y sekarang.
Thomas W.

3
Bekerja untuk saya (Chrome 34) bahkan tanpa trailing </svg>. Oh, dan markup itu mengerikan . Saya harap Anda malu pada diri sendiri. ;-)
Ilmari Karonen

2
@IlmariKaronen Saya am malu ;-). Biasanya saya bahkan lebih suka membersihkan XHTML daripada HTML. Lagi pula, jika saya meninggalkan trailing </svg>, saya hanya melihat lingkaran bukan garis (dalam file mandiri, tidak di dalam markup yang mungkin ditambahkan oleh JS Bin).
Thomas W.

1
Anda dapat mempersingkat evt.targetuntuk thismenghemat 6 byte.
Sikat gigi

17

CSS, 512 494 byte

<style>*,:after,:before{position:absolute;width:20;content:"";background:#fff}#a{margin:150;height:20;border:2px solid;border-radius:20px}#a:after{width:10;height:10;bottom:0;right:-8}p{top:7;left:-6;width:29;height:2;border:solid;border-width:2 0;transform:skewX(-23deg);margin:0;background:0}p:before{width:2;height:4;bottom:-3;left:-.5}p:after{width:16;height:16;bottom:-3;right:-8}</style><div id=a><p><script>document.getElementById('a').style.transform='scale('+(prompt()/24)+')'</script>

Bukan jawaban terkecil dengan sedikit pun, tetapi sekecil yang saya bisa dapatkan ketika memanggil semua css-minification-fu

Peringatan:

Kode di atas dengan semua 'px' dilucuti bekerja di Firefox & IE tetapi tidak Chrome & Safari yang lebih fussier tentang unit mereka :)

Saya juga harus menambahkan kembali px untuk membuat jsfiddle bekerja:

http://jsfiddle.net/9A3J9/

100: masukkan deskripsi gambar di sini

200: masukkan deskripsi gambar di sini

kode tanpa tanda:

 <style>
*,:after,:before{
    position:absolute;
    width:20;
    content:"";
    background:#fff
}
#a{
    margin:150;
    height:20;
    border:2px solid;
    border-radius:20px
}
#a:after{
    width:10;
    height:10;
    bottom:0;
    right:-8
}
p{
    top:7;
    left:-6;
    width:29;
    height:2;
    border:solid;
    border-width:2 0;
    transform:skewX(-23deg);
    margin:0;
    background:0
}
p:before{
    width:2;
    height:4;
    bottom:-3;
    left:-.5
}
p:after{
    width:16;
    height:16;
    bottom:-3;
    right:-8
}
</style>

<div id=a><p>

<script>
document.getElementById('a').style.transform='scale('+(prompt()/24)+')'
</script>

3
Wow! Itu skewXtrik bisa upvote saya sendiri.
manatwork

itulah yang saya mulai menulis kemarin. poin salah untuk Anda saat itu
Einacio

mengatur id pada div dan menggunakan getElementByIdmengurangi 6 karakter. dan kemudian Anda dapat menggunakan id di css untuk mengurangi 2 lagi
Einacio

juga, ptag penutup dapat dihilangkan jika tidak ada lagi konten setelahnya (menurut spesifikasi). dan saya akan memeriksa juga apakah browser autoclose div(meskipun dilarang oleh spec, itu bekerja di biola pada FF)
Einacio

@einacio saran bagus! kita turun ke 494 B. terima kasih :)
caitriona

16

PostScript + Ghostscript 137 + 6 = 143 (biner), 209 + 6 = 215 byte

Versi golf sepenuhnya dengan token biner:

$ hexdump -C euro_golfed.ps 
00000000  68 20 31 32 20 92 36 92  38 92 8b 37 2e 35 20 36  |h 12 .6.8..7.5 6|
00000010  92 ad 35 20 36 0a 31 2e  38 20 2d 31 2e 35 0a 33  |..5 6.1.8 -1.5.3|
00000020  2e 38 20 2d 33 2e 32 0a  33 2e 38 20 2d 36 0a 2d  |.8 -3.2.3.8 -6.-|
00000030  39 2e 34 20 2d 36 0a 2d  37 2e 31 20 2d 2e 35 0a  |9.4 -6.-7.1 -.5.|
00000040  2d 37 2e 35 20 2e 35 0a  2d 35 2e 32 20 36 92 6b  |-7.5 .5.-5.2 6.k|
00000050  37 7b 92 63 7d 92 83 35  2e 35 92 14 30 92 6f 2d  |7{.c}..5.5..0.o-|
00000060  38 20 2d 31 0a 2d 38 20  31 92 6b 32 7b 31 35 20  |8 -1.-8 1.k2{15 |
00000070  30 92 85 92 6b 7d 92 83  30 20 30 20 35 2e 35 20  |0...k}..0 0 5.5 |
00000080  30 20 33 36 30 92 05 92  a7                       |0 360....|
00000089

Unduh file biner kode tangan

Versi ASCII:

h 12 div dup scale
7.5 6 translate
5 6
1.8 -1.5
3.8 -3.2
3.8 -6
-9.4 -6
-7.1 -.5
-7.5 .5
-5.2 6
moveto
7{lineto}repeat
clip newpath
5.5 0
-8 -1
-8 1
moveto
2{15 0 rlineto moveto}repeat
0 0 5.5 0 360 arc
stroke

Simpan sebagai euro.psdan jalankan dengan Ghostscript like

gs -dh=80 euro.ps

Tanda Euro, 80 poin, diberikan oleh Ghostscript

gs -dh=20 euro.ps

Tanda Euro, 20 poin, diberikan oleh Ghostscript

Karena tidak ada yang namanya pixel dalam PostScript, tinggi itu diartikan sebagai poin. Saya menghitung +6 untuk saklar di baris perintah.


1
Meh, bagaimana saya bisa mengalahkan ukuran file yang dikompilasi. : D ... Bagaimana cara kerja token biner itu? Bukankah ini pada dasarnya seperti mengkompilasi kode dengan tangan?
Martin Ender

DCgaris tidak memotong garis horizontal dengan benar. Turun tegak lurus dari Dtidak memotong bentuk 'lingkaran' di tempat yang tepat, lebih rendah :(. Sepertinya sama dengan jawaban SVG Anda juga.
user2846289

+ Tepi kiri garis horizontal tidak selaras.
user2846289

@ m.buettner Nama-nama PostScript yang paling penting dapat diekspresikan menggunakan urutan dua byte. Ini tidak benar-benar kompilasi seperti Anda mengkompilasi program C atau Java. Ini akan melalui proses parsing yang sama seperti program PostScript. Jika Anda melihat hexdump atau membuka file biner dalam editor teks, Anda dapat melihat bahwa itu hampir sama dengan versi ASCII, tetapi sebagian besar nama diganti dengan urutan dua byte.
Thomas W.

@ Sadim Anda memiliki mata yang tajam! Saya kira saya memperdagangkan terlalu banyak presisi untuk singkatnya (pembulatan terlalu agresif). Saya mungkin harus menambahkan beberapa digit.
Thomas W.

13

Python - turtle - 517

import turtle,sys
from math import *
q=sqrt
h=int(sys.argv[1])/24
t=turtle.Turtle()
z=t.begin_fill
y=t.end_fill
x=t.goto
w=t.towards
v=t.fd
u=t.circle
r=t.seth
o=t.setx
n=t.xcor
t.pu()
x(10*h,0)
t.left(90)
t.circle(10*h,40)
z()
A=w(0,-12*h)
B=2/sin(A*pi/180)
u(10*h,280)
r(-90)
C=n()/h
v((q(144-C*C)-q(100-C*C))*h)
D=w(0,0)
r(D+90)
u(-12*h,D+135.42)
y()
F=2*pi/9
G=h*cos(F)/(5*sin(F)+6)
x(45*G,-3*h)
z()
o(-15*h)
r(A)
v(B*h)
o(45*G+15*h+n())
y()
x(65*G,h)
z()
o(-15*h)
r(A)
v(B*h)
o(65*G+15*h+n())
y()
t.ht()
input()

python % 100dan python % 500masing - masing:


3
Anda dapat menyimpan banyak karakter dengan menghilangkan beberapa pintasan yang Anda tentukan. Anda hanya menggunakan csatu kali, jadi sebenarnya akan lebih pendek jika Anda memohonnya math.cos, dan saya pikir mungkin ada orang lain yang bisa Anda hapus untuk memotong panjang keseluruhan.
AJMansfield

1
Anda dapat memotong enam karakter dengan menggunakan from math import *lalu menjatuhkan math.awalan.
alexwlchan

3
Anda menentukan u=t.circle, tetapi beberapa baris kemudian Anda lupa untuk menukar t.circle(...)panggilan.
Alconja

2
Turtle untuk menggambar €. Waktu yang tepat untuk hidup.
Nit

13

PHP, 432 435 367 356 334 byte

(Sunting: Rupanya IJ dan GH seharusnya sejajar dengan BCDE. Sekarang diperbaiki)

Script ini menghasilkan gambar SVG, tetapi akan berfungsi sebagai text/htmldefault. Saya pikir sebagian besar browser akan memperlakukan ini sebagai halaman web HTML yang berisi gambar SVG tertanam. Sepertinya itu bekerja baik untuk saya.

Ketinggian gambar dilewatkan sebagai parameter string kueri. (Catatan: jumlah byte menyertakan karakter baris baru di akhir baris 3, yang diperlukan agar ini berfungsi dengan baik).

<?php $x=$_GET['x']/12;$a=$x*5;$b=$x*6;$c=$x*7;$d=$x*12.4884;$e=$x*2.2863;$f=$x*5.5;$g=$x*.4157;$h=$x*6.5;$i=$x*7.5;$j=$x*12;$k=$x*11.3302;$l=$x*9.1628;$m=$x*8;$s=$x*12;echo<<<Q
<svg width="$s" height="$s"><clipPath id="c"><path d="M$d 0H$e L0 $f L$g $h L0 $i V$s H$k V$m H$l z"/></clipPath><g clip-path="url(#c)" fill="none" stroke="#000" stroke-width="$x"><circle cx="$i" cy="$b" r="$f"/><path d="M0 $a H$k M0 $c H$k"/></g></svg>
Q;

Versi terbaru ( 367 356 334 bytes):

preg_replace_callback()adalah cara yang jauh lebih efisien untuk menskalakan nilai numerik. Kode ini menghasilkan keluaran yang sama dengan versi aslinya. (Sunting: Pengurangan lebih lanjut berkat Einacio )

<?php
echo preg_replace_callback('/[\d\.]+/',function($m){return$m[0]*$_GET['x']/12;},'<svg width=12 height=12><clipPath id=c><path d=M12.4884,0H2.2863L0,5.5,0.4157,6.5,0,7.5V12H11.3302V8H9.1628z /></clipPath><g clip-path=url(#c) fill=none stroke=black stroke-width=1><circle cx=7.5 cy=6 r=5.5 /><path d=M0,5H11M0,7H11 /></g></svg>');

Keluaran:

euro.php? x = 60

masukkan deskripsi gambar di sini

euro.php? x = 200

masukkan deskripsi gambar di sini


widthdan heighttidak perlu di sini. Dan Anda perlu menentukan xmlnsuntuk membuatnya di sebagian besar browser (diuji Firefox dan Chrome; bahkan dengan jenis MIME yang tepat yang dikirim SVG, mereka berdua membuatnya sebagai XML, bukan SVG). ideone.com/JkqVL0 (menghapus nilai x hardcoded untuk solusi 369 byte)
Tim S.

@TIM. Tidak, itu tidak akan berfungsi dengan baik jika Anda menjalankan kode PHP di ideone dan menyalin hasilnya ke file SVG. Tetapi jika Anda benar-benar menerbitkan skrip di server web, PHP akan (secara default) menyajikan hasilnya dengan tipe MIME text/html. Chrome dan Firefox tidak memiliki masalah dengan ini, meskipun saya baru saja menemukan bahwa Safari sedikit lebih pernickety.
Kantor yg mudah tersinggung

Ah! Saya melihat triknya sekarang: text/htmlwith <svg>...diartikan sebagai file HTML dengan svgelemen, yang tidak perlu xmlnstetapi memang perlu widthdan height. Saya berpikir dalam hal file SVG, yang perlu tepat xmlns. Kode Anda baik-baik saja.
Tim S.

pada kode kedua, jika Anda menggunakan 24 bukannya 12, tidakkah Anda mengurangi 1 byte pada setiap nilai x.5?
Einacio

@Einacio Ya! :-) Sayangnya saya juga mendapatkan byte pada setiap kemunculan "5", "6", "7" dan "8". Panjang yang dihasilkan persis sama.
ossifrage mual

9

sh, 8604

Saya pikir seseorang mungkin bisa berbuat lebih baik, tetapi mari kita mulai ini.

echo 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|base64 -d|unxz>e.svg;echo \<img src=e.svg height=$1\>>e.htm;firefox e.htm

3
Bukankah itu datang di bawah celah standar hard-coding output?
user80551

4
Ini jelas termasuk dalam kategori "celah standar".
Igglyboo

2
@ Igglyboo: Bagaimana bisa begitu?
Ry-

18
Ini adalah jawaban yang sangat panjang untuk tantangan kode-golf. :-)
AL

2
@Igglyboo Tidak Setuju. .svg berbasis vektor sehingga dapat diskalakan tanpa batas - dan berdasarkan $1parameter input.
Trauma Digital

9

HTML5, 395

==> Coba online

<canvas id=c><script>_='function e,t,n){c.savtranslate,trotatn?0:.42)}v=docuEleById("c"c=vContex"2d"scalw=(v.width=v.height=promp))/12,w76,1arc(56--114.2,6,66-13,6.-   2,1 11.5)c.clearRec2restor-7mov-71lin6,.5,strokt(   .5--e(0,);1,ment.geteTo(';for(Y in $='  ')with(_.split($[Y]))_=join(pop());eval(_)</script>

Kode dikompres menggunakan JSCrush .

Berikut adalah kode yang tidak terkompresi:

<canvas id=c>
<script>
v=document.getElementById('c');
c=v.getContext('2d');
function r(){c.rotate(0.42)}
function t(x,y){c.save();c.translate(x,y)}
c.scale(w=(v.width=v.height=prompt())/12,w);
t(7.5,6);
c.arc(0,0,5.5,0,6);
c.stroke();
c.moveTo(-7.5,-1);c.lineTo(6,-1);
c.moveTo(-7.5,1);c.lineTo(6,1);
c.stroke();
c.clearRect(4.2,0,6,6);
t(0,6);r();
c.clearRect(0,-11,3,6.2);
c.restore();
t(-7.5,-0.5);r();
c.clearRect(-1,-2,1,2);
c.restore();
t(-7.5,1.5);r();
c.clearRect(-1,-1.5,1,1.5)
</script>

Ini dapat dikurangi menjadi 378 dengan bermain golf sumber sebelum menerapkan naksir: jsfiddle.net/_nderscore/EUBG8
nderscore

Ini adalah JavaScript, bukan HTML. Saya lelah dengan orang-orang yang tidak mengerti cara kerjanya.
Kura

1
Ya, karena <canvas>tag adalah JavaScript ... HTML5 sering digunakan untuk tidak menulis HTML / CSS / JS. Bukan karena orang tidak memahaminya, programmer sering malas (setidaknya saya). Komentar Anda agak kasar.
Michael M.

@Mig Saya pikir HTML + CSS + JS disebut DHTML?
kinokijuf

6

PostScript, 270

7 7 terjemahkan
/ l {lineto} def
/ o {0 0} def
o 6 44,85 165,52 busur
-7,08 1,5 l
-7,5 .5 l
o 6 175,22 184,74 busur
-7.08 -.5 l
-7,5 -1,5 l
o 6 194,48 309,67 busur
o 5 320 197,46 busur
1,87 -1,5 l
2.29 -.5 l
o 5 185,74 174,26 busur
2.7 .5 l
3.12 1.5 l
o 5 162,54 40 arcn
mengisi closepath

Ini hanya mendefinisikan garis besar dengan menambahkan elemen jalur berdasarkan koordinat yang saya hitung dengan bantuan GeoGebra, dan kemudian mengisi garis besarnya.

Saya menyimpan beberapa karakter dengan menambahkan pintasan untuk lineto( /l{lineto}def) dan asal lingkaran ( /o{0 0}def).

Untuk menentukan ukuran yang berbeda, tambahkan perintah formulir setelah baris kosong pertama.height width scale

Saat dijalankan sendiri, ini menarik tanda euro di sudut kiri bawah halaman dari ukuran halaman default. Simpan saja sebagai anything.psdan lihat dengan penampil dokumen.

Berikut adalah gambar dari ukuran standar, diraster ke sedikit lebih dari 90 piksel per inci:

ukuran standar pada 90 ppi

Pada ukuran 4x:

Ukuran 4x pada 90 ppi

Anda juga dapat mengunduh yang asli untuk kesenangan menonton Anda sendiri.


2
Apakah ia membaca argumen apa pun untuk menentukan ukuran tanda?
AL

@ n.1 oh, maaf, saya tidak membaca bagian spesifikasi itu. Saya akan memperbaikinya setelah makan malam.
AJMansfield

Silakan tambahkan tangkapan layar file yang diberikan.
AL

1
@ n.1 Saya telah menambahkan gambar.
AJMansfield

5

PHP (tanpa SVG), 628 597 byte

Terima kasih kepada AsksAnyway untuk pintasan fungsi yang bagus (mis $c = print; $c('Hello world!');.).

<?php header('Content-type:image/png');$h=$_GET['h'];$i=imagecreatetruecolor($h*1.1,$h*1.1);$c=imagecolorallocate;$b=$c($i,0,0,0);$w=$c($i,255,255,255);imagefill($i,0,0,$w);$l=$h*.7;$t=$h*.55;$u=$h/12;$e=imagefilledellipse;$e($i,$l,$t,$h,$h,$b);$e($i,$l,$t,$h*5/6,$h*5/6,$w);$f=imagefilledpolygon;$f($i,array($l+$u*5,$t+$u*1.5,$l-$u*7.5,$t+$u*1.5,$l-$u*7.125,$t+$u*0.5,$l+$u*4,$t+$u*.5,$l+$u*4,$t-$u*.5,$l-$u*7.5,$t-$u*.5,$l-$u*7.125,$t-$u*1.5,$l+$u*5,$t-$u*1.5),8,$b);$f($i,array($l+$u*4.24,$t-$u*4.24,$l+$u*1.84,$t+$u*1.5,$l+$u*3.84,$t+$u*3.26,$l+$u*3.84,$t+$u*4.62,$h*2,$t,),5,$w);imagepng($i);

Panggil file.php?h=200dari browser Anda untuk melihat gambar

Koordinat didasarkan pada pengukuran yang dilakukan dengan GIMP

100 piksel:

€ 100 piksel

200 piksel:

€ 200 piksel

Lapisan ditambahkan langkah demi langkah:

# GIF

Kode tidak digabungkan (dengan pecahan, kode golf memiliki nilai bulat)

<?php
header('Content-type: image/png');

$h = $_GET['h'];

$i = imagecreatetruecolor($h * 1.1,$h * 1.1);

$c = imagecolorallocate;

# black
$b = $c($i,0,0,0);
# white
$w = $c($i,255,255,255);

imagefill($i,0,0,$w);

$l = $h * .7; # distance between left and center of the circle
$t = $h * .55; # distance between top and center of the circle

# one "unit", as defined by the specs
$u = $h / 12;

$e = imagefilledellipse;
# disk is black
$e($i, $l, $t, $h, $h, $b);
# inner disk is white
$e($i, $l, $t, $h * (5 / 6), $h * (5 / 6), $w);

$f = imagefilledpolygon;
# draw 2 bars in black
$f($i, array(
# bottom bar
$l + $u * 5, $t + ($u * 1.5), # bottom right
$l-$u * 7.5, $t + ($u * 1.5), # bottom left
$l-$u * 7.125, $t + ($u * 0.5), # top left
$l + $u * 4, $t + ($u * 0.5), # top right
# top bar
$l + $u * 4, $t - ($u * 0.5), # bottom right
$l-$u * 7.5, $t - ($u * 0.5), # bottom left
$l-$u * 7.125, $t - ($u * 1.5), # top left
$l + $u * 5, $t - ($u * 1.5) # top right
), 8, $b);

# hide right parts of bars and circle by drawing white
$f($i, array(
$l + $u * 6 * (212 / 300), $t - ($u * 6 * (212 / 300)), # right of the disk
$l + $u * 6 * (92 / 300), $t + ($u * 6 * (74 / 300)), # left = bottom right of bottom bar
$l + $u * 6 * (191 / 300), $t + ($u * 6 * (163 / 300)), # bottom of the circle
$l + $u * 6 * (191 / 300), $t + ($u * 6 * (231 / 300)), # bottom of the circle too
$h * 2, $t, # some point at the right of the image (outside the image)
), 5, $w);

imagepng($i);

4

Bash + ImageMagick + alat baris perintah linux, 460 byte

base64 -d<<<H4sIADBMaVMAAy1Ru27DMAz8FUJdBVsk9QziLFo8uD/QrUDSOIDTBo1Rt39fUsl0POp0PEr7+88Zfq/L530w87redn2/bVu3cff1fe7JOdeLwsB2Oa7zYDw7A/Ppcp5XJWQO+9v7OsN9/VtOg/m4LMvuRS4ZOA7m1VkseQpBoQZvyXlQQPeA2JpEjVEGURL7EePkLCU3Rqw5Wo4EmLALVgaC9BUrk392OAWt0HUBPHrb+NQq4i5UzigeSU6Zsii5xOYiWLE0BCT1Z89QVKLD2dPEIbdEBasINWIDaiDxG2BjslpBXXTk5CeWFkYa1a2KuS0OMBfJ8RgdKzMr03DRP5Ojy5O8sE2ksdU1g+pcu+SqvILUWddNCBHbCIxvpj/s9ZsO/xXfC57OAQAA|zcat|convert -scale $1 svg:- png:-|xview stdin

Ini adalah teknik yang sama dengan jawaban @ minitech . Tetapi data .svg berasal dari sini, yang jauh lebih pendek: http://commons.wikimedia.org/wiki/File:Euro_symbol_black.svg . ImageMagick mengubah data vektor menjadi data .png pada skala yang diminta dan pipa ke xview.

Output untuk ./euro.sh 30:

masukkan deskripsi gambar di sini

Output untuk ./euro.sh 300:

masukkan deskripsi gambar di sini


7
Mengapa versi besar tidak terisi?
Cole Johnson

2
bagaimana Anda bisa output gambar ke stdin?
phuclv

@ LưuVĩnhPhúc Anda tidak dapat "output" ke input standar. Dia hanya mengirim banyak karakter base64, yang merupakan program, yang mendekompilasi menjadi token biner (mewakili file svg, tampaknya), yang dengannya dia melakukan lebih banyak hal.
mulai

2
@tommeding Saya percaya mereka bingung dengan judul jendela menjadi "stdin".
mniip

@ ColeJohnson Saya pikir tidak ada versi yang diisi, tetapi pada versi kecil garis-garis dalam dan luar dirender cukup dekat agar tampak solid. Setelah mengatakan bahwa ada beberapa hal aneh yang terjadi dengan ImageMagick yang saya tidak mengerti - tapi saya pikir gambar yang dihasilkan cukup dekat untuk kode-golf ;-)
Digital Trauma

2

POV-Ray (370 byte)

Saya tidak tahu cara membuat area vertikal yang sama dan mempertahankan rasio aspek pada saat yang sama, jadi saya memutuskan untuk memilih ketinggian yang tepat dan hingga pengguna dapat membuat hanya dalam format 4: 3

camera{angle 9 location 102*z right x*8 up y*6 look_at 0}
light_source{99*z color 1}
plane{z,0 pigment{color rgb 1}}
#declare b=difference{box{<-5,-.5,1>,<8,.5,1>}box{-2,2 rotate-67*z translate 9.4*x}}
difference{union{torus{5.5,.5 rotate 90*x}object{b translate y}object{b translate -y}}box{<-3.83,-5,-3>,<-7,0,3>}box{<0,7,3>,<-4,-2,-3>rotate 23*z translate-2.5*x}}

jalankan bersama povray.exe /RENDER euro.pov -w600 -h800

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini


2

Memproses, 232 byte

Pemrosesan tidak benar-benar memungkinkan menerima argumen baris perintah karena sangat khusus untuk menggambar, tetapi fungsi saya mengambil parameter sebagai tinggi sebagai kompensasi. Koordinat dikodekan / diperkirakan dari gambar di atas, dan seluruh kanvas diskalakan berdasarkan parameter input untuk mendapatkan gambar ukuran sewenang-wenang.

void E(int h){scale(h/12,h/12);noFill();strokeWeight(1);arc(7.5,6,11,11,0.7,PI*2-0.7,OPEN);noStroke();fill(0);shearX(-PI/6);rect(3.2,4.5,9,1);rect(4.4,6.5,8,1);shearX(PI/6);fill(255);rect(11,6,9,6);triangle(8.75,6,12.25,6,12.25,0);}

+ Seluruh program tidak dikumpulkan

void setup()
{
  size(575, 500);
}

void draw()
{
  background(255);
  E(height);
  noLoop();
}

void E(int h)
{
  scale(h/12,h/12);
  //Main "C"
  noFill();
  strokeWeight(1);
  arc(7.5,6,11,11,0.7,PI*2-0.7,OPEN);
  //settings for other shapes
  noStroke();
  //the two bars
  fill(0);
  shearX(-PI/6);
  rect(3.2,4.5,9,1);
  rect(4.4,6.5,8,1);
  //bottom cut of "C"
  shearX(PI/6);
  fill(255);
  rect(11,6,9,6);
  //top cut of "C"
  triangle(8.75,6,12.25,6,12.25,0);
}

Keluaran

Memproses sketsa Euro


1
Anda dapat bermain golf dengan menggunakan 1alih-alih OPENmengubah 255in backgrounddan fillpanggilan ke-1
Kritixi Lithos
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.