Narysuj znak €


61

Celem jest wygenerowanie lub wyświetlenie obrazu ze znakiem € (euro) zgodnie z następującymi specyfikacjami (ignorowanie granicy znaku).

€ sign

Źródło: http://en.wikipedia.org/wiki/File:Euro_Construction.svg

Zasady:

  • Program / skrypt musi przyjąć wysokość znaku w pikselach jako argument (puste miejsce wokół znaku jest opcjonalne)
  • Znak nie może być sporządzony jako lub z charakterem, bezpośrednio (nie jest to zabronione w obrazie) lub pośrednio (obliczenie następnie wyświetla je na stronie HTML)print8364
  • Dane wyjściowe nie muszą być zapisywane w żadnym pliku, można je wyświetlić, a następnie wyświetlić jako zrzut ekranu
  • Standardowe „luki” są zabronione
  • Najkrótszy kod wygrywa

7
Podstępne! Czas przejrzeć moją geometrię / trygonometrię. Widzę niektóre współrzędne dość trudne do ustalenia.
Michael M.

5
Musiałem poszukać „fakultatywnego”
Digital Trauma

2
Naprawdę liczę na odpowiedź LaTeX + TikZ :)
Cole Johnson

12
Bez euro ten problem nie istniałby, tym samym po raz kolejny pokazując prawdę o „Mo money mo problem”
Thomas Johnson

1
Nie wiem, co jest typograficznie użyteczne i nie jestem typografem. Jeśli chcesz idealnego znaku €, po prostu użyj znaku €. Ale to nie jest cel tego pytania. Nie spodziewałem się, że piksele będą doskonałe. Jeśli nie podoba Ci się to, możesz dodać kolejne pytanie z innymi zasadami.
AL

Odpowiedzi:


22

PostScript / GhostScript, 100

(96 dla programu, 4 dla prefiksu przełącznika wiersza poleceń)

W pełni golfowy i ręcznie tokenizowany:

$ 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

Możesz otrzymać kopię tutaj , na swoim własnym oglądania.

Po zapoznaniu się z odpowiedzią @ ThomasW i uważnym rozważeniu mojego programu, zdałem sobie sprawę, że mogę to zrobić jeszcze lepiej.

Wersja tokenizowana jest równoważna z następującą:

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

Wyjaśnienie optymalizacji:

Po pierwsze, przekształciłem moje pierwsze rozwiązanie w związek kilku prostszych podścieżek, zamiast jednej ścieżki opisującej całość. Pożyczyłem metodę Thomasa wprowadzania parametru, który jest znacznie lepszy niż to, co miałem.

Następnie pomnożyłem wszystkie współrzędne przez 10 i zaokrągliłem wszystko, aby uzyskać tylko współrzędne całkowite. Zaokrągliłem również kąty i przekonwertowałem dwa duże na równoważne kąty ujemne. Dzięki temu każda liczba mieści się w przedziale od -128 do 127.

A potem wszystko tokenizowałem . Każdy operator może być reprezentowany przez sekwencję dwubajtową. A ponieważ każda liczba może być reprezentowana przez jednego podpisanego bajt, każdy też staje się tylko dwa bajty. Jedyną częścią, z którą nie mogłem tego zrobić, był hna początku, ale to także tylko dwa bajty, tylko hi spacja po nim.

Uruchom jako:

gs -dh=200 euro.ps

200 pt wysokości

gs -dh=80 euro.ps

80 pkt wysokości

gs -dh=20 euro.ps

20 pkt wysokości


Nowość: jeszcze krótsze wersje!

Używając zakodowanych ścieżek użytkownika, udało mi się zmniejszyć rozmiar programu o kilka bajtów. Każdy z tych programów jest równoważny z pierwszym, dając identyczne wyjście:

92 bajty:

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

Co odpowiada:

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

A nieco sprzeczne z intuicją, mylące rozwiązanie oszczędza jeszcze jedną postać, tylko 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

Co odpowiada:

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
Świetna robota! Chyba będę musiał nauczyć się wszystkiego o tokenach binarnych.
Thomas W.,

@ThomasW. Chociaż jeszcze nie skończyłem; Wciąż czytam dokumentację ciągów kodowanych ścieżek ...
AJMansfield

Później nie potrzebujesz miejsca, hponieważ tokeny binarne same się ograniczają. BTW, jak to kodowałeś? Zrobiłem to za pomocą standardowego edytora szesnastkowego, co jest uciążliwe.
Thomas W.

2
Pliki tokenizowane @ n.1 działają dokładnie tak samo, jak zwykłe pliki PostScript, a nawet możesz łączyć tokeny binarne i standardowy tekst PostScript w postaci zwykłego tekstu w tym samym pliku. Każdy token binarny odpowiada bezpośrednio operatorowi lub innemu obiektowi, dzięki czemu można łatwo zastąpić lub wstawić operacje, a nawet skopiować fragmenty kodu do innego programu. Dokładne informacje o formie tokena znajdują się w podręczniku PostScript Language Reference Manual (czerwona książka) w rozdziale 3.12. Zakodowane ścieżki użytkownika opisano w 4.6.2.
AJMansfield,

1
@ n.1 Z tego powodu użyłem edytora szesnastkowego do napisania pliku. Bajty ogranicznika tokenów zwykle odpowiadają znakom kontrolnym w ISO-Latin-1 i innym kodowaniu o stałej szerokości, ale jeśli edytor interpretuje go w UTF-8 lub innym kodowaniu o zmiennej szerokości, otrzymasz takie rzeczy, tak samo z dowolnym inny plik zawierający dane binarne.
AJMansfield

50

Mathematica, 193 183 177 173 169 166 bajtów

Tak, matematyka! Planuję region, który spełnia pewien (raczej skomplikowany) zestaw nierówności:

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->#]&

Zastosowanie to e[height]np . e[100]:

wprowadź opis zdjęcia tutaj

Lub e[200]:

wprowadź opis zdjęcia tutaj

Można zauważyć, że ostrzejsze krawędzie są lekko zaokrąglone. Wynika to z faktu, że region można wykreślić tylko poprzez próbkowanie punktów w przestrzeni, a Mathematica domyślnie nie próbkuje każdego piksela. Rozdzielczość próbkowania można zwiększyć, dodając inną opcję PlotPoints->#(która wykorzystuje jedną próbkę na piksel), która dodaje 14 znaków . Nie polecam uruchamiania go z tą opcją, ponieważ znacznie wydłuża czas działania i ledwo zwiększa atrakcyjność wizualną #/4. W związku z tym (po zatwierdzeniu PO) nie jest uwzględniany w partyturze.

Oto nieco niestosowana wersja:

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
  ]
);

Zauważ, że w wersji golfowej przeskalowałem układ współrzędnych 2 razy, aby uniknąć .5s, ale okazuje się, że liczba znaków jest w rzeczywistości identyczna.

Oto wyjaśnienie, jak opracowałem formułę. Podzieliłem kształt na dwa regiony. Jeden zawiera pierścień i paski i jest odcięty w prawo wraz ze BCDEzboczem, a w lewo ze zboczami IJi GH(więcej na ten temat później). Drugi zawiera ten sam pierścień, ale jest po prostu odcięty na współrzędnej x punktu D. Warunki dla dwóch regionów są łączone ||, co działa tutaj jak ustalony związek.

Pierścień jest po prostu zdefiniowany jako 5 < r < 6, gdzie rjest odległość od początku. jest łatwiejsze do wypracowania ( x²+y²), więc używam, 25 < x² + y² < 36aby uzyskać wszystkie punkty w ringu.

Paski są pomiędzy ±.5i ±1.5. Możemy obsłużyć oba paski w tym samym czasie, przyjmując moduł y , więc paski (o nieskończonej długości) po prostu się spełniają .5 < |y| < 1.5. Ponownie, aby wziąć połączenie pasków i pierścienia, po prostu używam ||.

Ciekawe jest jednak to, jak zdobyć „maski”. Punkt Dma współrzędną x5 cos 40° , więc maska ​​dbająca o dolną krawędź (w połączeniu tylko z pierścieniem) jest po prostu x < 5 cos 40°. Można to zastosować poprzez ustawienie przecięcia, co przekłada się &&na logikę.

Inne maski są naprawdę trudną częścią. Najpierw zdobądźmy nachylenie BCDE. Możemy łatwo konstruować punkty Ci odpowiednio Djako (0, -6)i 5 (cos 40°, sin 40°). Wektor wskazujący wzdłuż linii jest wtedy sprawiedliwy D - C = (5 cos 40°, 5 sin 40° + 6). Aby zastosować maskę po prawej stronie, muszę tylko dowiedzieć się, czy punkt znajduje się po lewej lub po prawej stronie tej linii (nazwijmy wektor linii p). Mogę to rozgryźć, biorąc wektor z Cmojego interesującego miejsca i rzutując go na wektor prostopadły do p. Znak projekcji powie mi, po której stronie jest punkt. Uzyskanie wektora prostopadłego jest dość proste w 2D: odwróć współrzędne i odwróć znak jednego z nich. To jest zmienna dw moim kodzie:(-5 sin 40° - 6, 5 cos 40°). Wektor od Cdo punktu zainteresowania q = (x, y)to q - C = (x, y + 6). Projekcja to po prostu iloczyn skalarny (lub iloczyn skalarny) pomiędzy qi d. Sposób, w jaki to wybrałem d, wskazuje na lewo, więc chcę d.(q-C) > 0. Ten warunek dotyczy maski po prawej stronie.

W przypadku maski po lewej stronie mogę użyć zasadniczo tego samego pomysłu. Nachylenie jest takie samo i dlatego tak jest d. Muszę tylko przesunąć punkt od lewego dolnego rogu pasków zamiast od C. Mają one współrzędne (-7.5, 0.5)(górny pasek) i (-7.5, -1.5)(dolny pasek). To wymagałoby dwóch niezależnych reguł dla dwóch pasków. Należy jednak pamiętać, że wszystkie punkty dotknięte dolną maską znajdują się w dolnym pasku, a zatem mają ujemne y . Wszystkie punkty dotknięte górną maską mają dodatnie y . Więc mogę po prostu zmienić swoje przesunięcie, używając tego, Sign[y]który jest 1na plus i -1na minus y. Więc mój punkt przesunięcia staje się(-7.5, -0.5 + Sign[y]). W przeciwnym razie maska ​​działa tak jak maska ​​po prawej stronie. Oczywiście tym razem projekcja musi być negatywna. Więc naiwnie to by było coś takiego RH-projection > 0 && LH-projection < 0(co też pierwotnie miałem w kodzie). Ale możemy to skrócić, ponieważ pomnożenie liczby dodatniej i ujemnej musi dać liczbę ujemną, więc po prostu RH * LH < 0(gdzie RHi gdzie LHsą odpowiednie prognozy).

Otóż ​​to. Złożenie tego wszystkiego razem prowadzi do następującej logicznej struktury:

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

Dla jasności współrzędne w moim wyjaśnieniu odnoszą się do schematu konstrukcyjnego podanego w wyzwaniu. Jak wspomniano powyżej, mój kod mnoży je wszystkie przez 2- Zmieniłem go, aby zapisać bajty, ale liczba bajtów jest w rzeczywistości identyczna i nie mogłem sobie pozwolić na ponowne cofnięcie zmiany. Także liczby całkowite wyglądają ładniej.


1
Jestem stosunkowo nowy w Mathematica, więc docenię kilka komentarzy na temat twojego kodu!
Thomas W.

2
@ThomasW. Cóż, rzeczywiste rzeczy Mathematica to tylko wezwanie, do RegionPlotktórego po prostu kolory we wszystkich punktach przestrzeni, które spełniają dany warunek. Dając go x^2+y^2<1, narysujesz koło jednostki. Dodam jednak wyjaśnienie faktycznych obliczeń matematycznych (później wieczorem).
Martin Ender

1
Jaka jest długość kodu bez zaokrąglonych krawędzi? Myślę, że masz najkrótszy kod w tej chwili, ale nie mogę zaakceptować twojej odpowiedzi z zaokrąglonymi narożnikami, byłoby niesprawiedliwe wobec innych odpowiedzi, które nie miały zaokrąglonych rogów. Należy ściśle przestrzegać specyfikacji. Dzięki
AL

@ n.1 O ile nie dyskwalifikujesz odpowiedzi Thomasa W. w języku PostScript, ponieważ jest ona binarna lub ponieważ jest zbyt agresywnie zaokrąglona, ​​jego odpowiedź jest zdecydowanie krótsza. Jednak ustalenie rozdzielczości zajmuje 14 znaków, więc moja odpowiedź jest wciąż najkrótsza po jego. Będę edytować.
Martin Ender

1
@ThomasW. proszę bardzo!
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;

pobierz emulator ze strony http://www.bbcbasic.co.uk/bbcwin/bbcwin.html

W BBC basic wszystkie grafiki są obsługiwane na niskim poziomie przy użyciu specyficznych dla maszyny znaków kontrolnych ASCII (ale dla wygody dostępne są również niektóre polecenia wysokiego poziomu). Zastosowano tutaj 22 (zmień tryb wyświetlania) 29 (zmień origin) i 25, równoważne instrukcji PLOT, która pobiera dodatkowy parametr akcji (narysuj linię, okrąg, trójkąt itp. w tle / pierwszym planie z ruchem względnym / bezwzględnym) przed parametrami X i Y.

Wszystko, co muszę zrobić, to wysłać ładunek znaków do kontrolera VDU. wartości zakończone średnikiem wynoszą 16 bitów. inne są 8-bitowe. Całkowita liczba bajtów wysłanych do kontrolera VDU wynosi 91 , choć samo w sobie nie kwalifikuje się jako odpowiedź, ponieważ na tym etapie rozmiar jest zakodowany na stałe.

Oczywistym miejscem pochodzenia jest środek koła, ale tak naprawdę więcej poleceń jest zaangażowanych w tworzenie pasków. Więc przesunąłem początek o 1,5 w dół na dół dolnego paska, co zmniejsza liczbę wymaganych ułamków i liczb ujemnych. Pozostaje na linii pionowej ze środkiem okręgu, co jest ważne, ponieważ linia E zaczyna się od tej linii pionowej.

Właściwie musiałem tylko obliczyć 3 liczby na podstawie rysunku: górny wewnętrzny narożnik kształtu C (5 cos 40, 5 sin 40 + 1,5) = (3,8302,3.1394 + 1,5) = około (12 / 3,1, 4,6) i gradient linii E: x / y = 3,8302 / (6 + 3,1394) = 0,4157 = około 1 / 2,4

Ponieważ mam tylko bezpłatną wersję ewaluacyjną (interpretowaną), przyjmuję wysokość symbolu jako dane wejściowe użytkownika. Jeśli kupisz pełną wersję (29,99 GBP), możesz skompilować, a następnie przeczytać wiersz poleceń w=VAL(@cmd$)/12.

Nieskluczony kod

W kodzie golfowym jest tylko jedna instrukcja VDU, ale w kodzie bez golfa dzielę ją na kilka dla jasności. Ponadto, ponieważ BBC basic jest małym endianem, kombinację p,0,można p;zagrać w golfa, ale dla jasności zostawiłem ją bez golfa.

  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)

wprowadź opis zdjęcia tutaj


BBC BASIC. Niesamowite! To przywraca mnie prawie trzydzieści lat!
Tom Chantler

1
@Dommer BBC Basic został wydany po raz pierwszy w 1981 r., Ponad 20 lat przed wydrukowaniem pierwszych banknotów euro (2002 r.). To jedyny sposób, aby narysować duży znak euro na takiej maszynie! Ewentualnie można przedefiniować znak ASCII ndo symbolu euro z bitmapy 8x8, tak: VDU 23,n,30,33,120,32,120,30,30,0. Według Wikipedii BBC Basic jest wciąż rozwijany, głównie na urządzenia mobilne.
Level River St

W rzeczy samej! Wydaje mi się, że mamy swoje w 1984 roku. Pamiętam, jak rysowałem fajne duszki na papierze milimetrowym, a potem opracowywałem ich reprezentacje binarne, co jestem pewien, że ty też to zrobiłeś. Na której nucie właśnie narysowałem twój symbol euro ręcznie. Jest bardzo dobrze, gdy literówka zostanie naprawiona, a wartość przedterminowa zostanie zmieniona z 30 na 33. Z twojego profilu wynika, że ​​używałeś również LOGO, które ponownie zabiera mnie z powrotem do szkoły podstawowej. Wspaniale jest dowiedzieć się, że BBC Basic jest nadal w użyciu. Gdyby to nam wystarczyło ...
Tom Chantler

Aby dodać, bitmapę BBC Basic 8x8 można uczynić bardziej „kursywą” (zgodnie z większym logo), zmieniając ją na VDU 23,n,30,33,124,32,120,33,30,0. Dzięki za podróż w dół linii pamięci.
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>

Chociaż używa tylko SVG, w dużej mierze opiera się na luźnym parsowaniu HTML i musi być obsługiwany jako HTML. Ścisłe SVG wymagałoby znacznie więcej bajtów.

Spróbuj!


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

1
Tak, myślałem o współrzędnych PostScript, które są na odwrót! Zamieniono teraz oś y.
Thomas W.

3
Pracuj dla mnie (Chrome 34) nawet bez końcowego </svg>. Aha, a ten znacznik jest okropny . Mam nadzieję, że się wstydzisz. ;-)
Ilmari Karonen

2
@IlmariKaronen ja jestem zawstydzony ;-). Zwykle wolę nawet czysty XHTML niż HTML. W każdym razie, jeśli pomijam końcowe </svg>, widzę tylko koło, a nie linie (w samodzielnym pliku, nie wewnątrz znacznika, który JS Bin mógłby dodać).
Thomas W.

1
Możesz skrócić evt.targetdo this, oszczędzając 6 bajtów.
Szczoteczka do zębów

17

CSS, 512 494 bajtów

<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>

Nie jest to najmniejsza odpowiedź, ale tak mała, jak to tylko możliwe, nawet przy wzywaniu wszystkich moich css-minification-fu

Ostrzeżenia:

Powyższy kod ze wszystkimi pasmami „px” działa w Firefox i IE, ale nie w Chrome i Safari, które są bardziej wybredne w swoich urządzeniach :)

Musiałem także ponownie dodać pliki px, aby jsfiddle działał:

http://jsfiddle.net/9A3J9/

100: wprowadź opis zdjęcia tutaj

200: wprowadź opis zdjęcia tutaj

nieprzypisany kod:

 <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
Łał! Ta skewXsztuczka może sprawić, że mój głos zostanie sam.
manatwork

dokładnie to zacząłem pisać wczoraj. fałszywe punkty do ciebie wtedy
Einacio

ustawienie id na div i użycie getElementByIdzmniejsza 6 znaków. a następnie możesz użyć identyfikatora w css, aby zmniejszyć jeszcze 2
Einacio

Ponadto, pznacznik zamykający może być pominięty, jeśli nie ma już po nim zawartości (SPEC). i sprawdziłbym również, czy przeglądarki automatycznie zamykają div(chociaż jest to zabronione przez specyfikację, działało to w skrzypcach na FF)
Einacio

@einacio świetne sugestie!
spadamy

16

PostScript + Ghostscript 137 + 6 = 143 (binarnie), 209 + 6 = 215 bajtów

Wersja w pełni golfowa z tokenami binarnymi:

$ 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

Pobierz ręcznie kodowany plik binarny

Wersja 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

Zapisz jako euro.psi uruchom z Ghostscript jak

gs -dh=80 euro.ps

Znak euro, 80 punktów, renderowany przez Ghostscript

gs -dh=20 euro.ps

Znak euro, 20 punktów, renderowany przez Ghostscript

Ponieważ w PostScript nie istnieje piksel, wysokość jest interpretowana w punktach. Obliczyłem +6 dla przełącznika w linii poleceń.


1
Meh, jak mam pokonać skompilowany rozmiar pliku. : D ... Jak działają te tokeny binarne? Czy to nie jest po prostu ręczne kompilowanie kodu?
Martin Ender

DClinia nie przecina prawidłowo poziomych pasków. Prostopadle w dół od Dnie wycina kształtu „koła” we właściwym miejscu, niżej :(. Wygląda tak samo z odpowiedzią SVG.
user2846289

+ Lewe krawędzie poziomych pasków nie są wyrównane.
user2846289

@ m.buettner Najważniejsze nazwy PostScript można wyrazić za pomocą sekwencji dwóch bajtów. Nie jest to tak naprawdę kompilacja, jak w przypadku kompilacji programu C lub Java. Przejdzie ten sam proces analizowania, co dowolny program PostScript. Jeśli spojrzysz na zrzut heksadecymalny lub otworzysz plik binarny w edytorze tekstów, zobaczysz, że jest prawie taki sam jak wersja ASCII, ale większość nazw została zastąpiona sekwencją dwóch bajtów.
Thomas W.

@VadimR Masz bystre oko! Wydaje mi się, że wymieniłem zbyt dużą precyzję za zwięzłość (zaokrąglanie zbyt agresywnie). Być może będę musiał dodać kilka cyfr.
Thomas W.

13

Python - żółw - 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 % 100i python % 500odpowiednio:


3
Możesz uratować wiele postaci, pozbywając się kilku zdefiniowanych przez siebie skrótów. Używasz tylko craz, więc tak naprawdę krótsze byłoby wywołanie go jako math.cos, i myślę, że prawdopodobnie istnieją inne, których nie można skrócić, aby skrócić całkowitą długość.
AJMansfield

1
Możesz ogolić sześć znaków, używając, from math import *a następnie upuszczając math.prefiksy.
alexwlchan

3
Definiujesz u=t.circle, ale kilka linii później zapomniałeś zamienić t.circle(...)połączenie.
Alconja

2
Turtle, aby wylosować €. Co za czas na życie.
Nit

13

PHP, 432 435 367 356 334 bajtów

(Edycja: Najwyraźniej IJ i GH powinny być równoległe do BCDE. Teraz naprawione)

Ten skrypt wyświetla obraz SVG, ale text/htmldomyślnie będzie go obsługiwał . Myślę, że większość przeglądarek potraktuje to jako stronę HTML zawierającą osadzony obraz SVG. W każdym razie wydaje mi się, że działa.

Wysokość obrazu jest przekazywana jako parametr ciągu zapytania. (Uwaga: liczba bajtów zawiera znak nowej linii na końcu wiersza 3, który jest niezbędny do poprawnego działania).

<?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;

Zaktualizowana wersja ( 367 356 334 bajtów):

preg_replace_callback()jest znacznie bardziej wydajnym sposobem skalowania wartości liczbowych. Ten kod generuje takie same dane wyjściowe jak wersja oryginalna. (Edytuj: Dalsze redukcje dzięki 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>');

Wynik:

euro.php? x = 60

wprowadź opis zdjęcia tutaj

euro.php? x = 200

wprowadź opis zdjęcia tutaj


widthi heightsą tutaj niepotrzebne. Musisz określić xmlns, aby wyświetlał się w większości przeglądarek (przetestowany Firefox i Chrome; nawet po wysłaniu odpowiedniego typu MIME SVG, oba wyświetlają jako XML, a nie SVG). ideone.com/JkqVL0 (usuń zakodowaną wartość x dla rozwiązania 369 bajtów)
Tim S.

@TimS. Nie, to nie będzie działać poprawnie, jeśli uruchomisz kod PHP w ideone i skopiujesz wyniki do pliku SVG. Ale jeśli faktycznie opublikujesz skrypt na serwerze WWW, PHP (domyślnie) wyświetli wyniki z typem MIME text/html. Chrome i Firefox nie mają z tym żadnych problemów, chociaż właśnie odkryłem, że Safari jest nieco bardziej złośliwe.
piskliwy kostnica

Ach! Teraz widzę sztuczkę: text/htmlz <svg>...jest interpretowany jako plik HTML z svgelementem, który nie potrzebuje, xmlnsale potrzebuje widthi height. Myślałem o pliku SVG, który wymaga właściwego xmlns. Twój kod jest w porządku.
Tim S.

na drugim kodzie, jeśli użyjesz 24 zamiast 12, czy nie zmniejszysz 1 bajtu na każdą wartość x.5?
Einacio

@Einacio Tak! :-) Niestety, przy każdym wystąpieniu „5”, „6”, „7” i „8” również zyskuję bajt. Wynikowa długość jest dokładnie taka sama.
skrzypliwy ossifrage

9

sh, 8604

Myślę, że ktoś może prawdopodobnie lepiej, ale zacznijmy od tego.

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

3
Czy nie byłoby to objęte standardową luką w kodowaniu wyjścia?
user80551

4
To zdecydowanie należy do kategorii „standardowych luk”.
Igglyboo

2
@Igglyboo: Jak to możliwe?
Ry-

18
To bardzo długa odpowiedź na wyzwanie związane z golfem. :-)
AL

2
@Igglyboo Nie zgadzam się. .svg jest oparty na wektorze, więc można go bezstopniowo skalować - i zależy od $1parametru wejściowego.
Cyfrowa trauma

9

HTML5, 395

==> Wypróbuj 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>

Kod jest kompresowany za pomocą JSCrush .

Oto nieskompresowany kod:

<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>

Można to zmniejszyć do 378, grając w golfa w źródle przed zastosowaniem crush: jsfiddle.net/_nderscore/EUBG8
nderscore

To jest JavaScript, a nie HTML. Mam dość ludzi, którzy nie rozumieją, jak to działa.
Żółw

1
Tak, ponieważ <canvas>tag jest JavaScript ... HTML5 jest często używany do nie pisania HTML / CSS / JS. Nie dlatego, że ludzie tego nie rozumieją, programiści są po prostu często leniwi (przynajmniej ja). Twój komentarz wydaje się nieco ostry.
Michael M.

@Mig Myślałem, że HTML + CSS + JS nazywa się DHTML?
kinokijuf

6

PostScript, 270

7 7 tłumaczyć
/ l {lineto} def
/ o {0 0} def
o 6 44,85 165,52 łuk
-7,08 1,5 l
-7,5. 5 l
o 6 175,22 184,74 łuk
-7,08 -,5 l
-7,5 -1,5 l
o 6 194,48 309,67 łuku
o 5 320 197,46 ark
1,87 -1,5 l
2,29 -,5 l
o 5 185,74 174,26 arcn
2,7 .5 l
3,12 1,5 l
o 5 162,54 40 ark
wypełnij ścieżkę

To po prostu definiuje kontur, dodając elementy ścieżki na podstawie współrzędnych obliczonych za pomocą GeoGebry, a następnie wypełnia kontur.

Zapisałem kilka znaków, dodając skróty do lineto( /l{lineto}def) i początek okręgu ( /o{0 0}def).

Aby określić inny rozmiar, dodaj polecenie formularza po pierwszym pustym wierszu.height width scale

Po uruchomieniu samodzielnie rysuje znak euro w lewym dolnym rogu strony o domyślnym rozmiarze strony. Po prostu zapisz jako anything.psi przeglądaj w przeglądarce dokumentów.

Oto jego zdjęcie w domyślnym rozmiarze, zrasteryzowane do nieco ponad 90 pikseli na cal:

domyślny rozmiar przy 90 ppi

W rozmiarze 4x:

Rozmiar 4x przy 90 ppi

Możesz również pobrać oryginał dla własnej przyjemności oglądania.


2
Czy czyta jakiś argument określający rozmiar znaku?
AL

@ n.1 och, przepraszam, nie przeczytałem tej części specyfikacji. Naprawię to po obiedzie.
AJMansfield,

Dodaj zrzut ekranu renderowanego pliku.
AL

1
@ n.1 Dodałem zdjęcia.
AJMansfield

5

PHP (bez SVG), 628 597 bajtów

Dzięki AsksAnyway za miły skrót do funkcji (np $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);

Zadzwoń file.php?h=200z przeglądarki, aby zobaczyć obraz

Współrzędne są oparte na pomiarach wykonanych za pomocą GIMP

100 pikseli:

100 € pikseli

200 pikseli:

200 € pikseli

Warstwy dodawane krok po kroku:

# GIF

Kod bez golfa (z ułamkami kod z golfem ma zaokrąglone wartości)

<?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 + narzędzia wiersza poleceń Linux, 460 bajtów

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

Jest to ta sama technika jak @ minitech za odpowiedź . Ale dane .svg pochodzą stąd, co jest znacznie krótsze: http://commons.wikimedia.org/wiki/File:Euro_symbol_black.svg . ImageMagick konwertuje dane wektorowe na dane .png w żądanej skali, a potoki do xview.

Dane wyjściowe dla ./euro.sh 30:

wprowadź opis zdjęcia tutaj

Dane wyjściowe dla ./euro.sh 300:

wprowadź opis zdjęcia tutaj


7
Dlaczego duża wersja nie jest wypełniona?
Cole Johnson

2
jak możesz wyprowadzać obrazy na standardowe wyjście?
phuclv

@ LưuVĩnhPhúc Nie można „wyprowadzić” na standardowe wejście. Po prostu wysyła mnóstwo znaków do base64, który jest programem, który dekompiluje go na binarne tokeny (najwyraźniej reprezentujące plik svg), z którymi robi więcej rzeczy.
tomsmeding

2
@tomsmeding Uważam, że byli zdezorientowani tytułem okna „stdin”.
mniip

@ColeJohnson Myślę, że żadna wersja nie jest wypełniona, ale w małej wersji linie wewnętrzne i zewnętrzne są wystarczająco blisko, aby wyglądały na solidne. Powiedziawszy, że w ImageMagick wyraźnie dzieje się coś dziwnego, aliasing, którego nie do końca rozumiem - ale myślę, że wygenerowany obraz jest wystarczająco blisko do gry w golfa ;-)
Digital Trauma

2

POV-Ray (370 bajtów)

Nie mogłem wymyślić, jak wyrenderować ten sam obszar pionowy i jednocześnie zachować proporcje, więc zdecydowałem się wybrać odpowiednią wysokość i to do użytkownika, aby renderować tylko w formacie 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}}

Biegnij z povray.exe /RENDER euro.pov -w600 -h800

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj


2

Przetwarzanie, 232 bajty

Przetwarzanie tak naprawdę nie pozwala na przyjmowanie argumentów wiersza poleceń, ponieważ jest ono tak wyspecjalizowane w rysowaniu, ale moja funkcja przyjmuje parametr jako wysokość w celu kompensacji. Współrzędne są zakodowane na stałe / w przybliżeniu na powyższym obrazie, a całe płótno jest skalowane na podstawie parametru wejściowego, aby uzyskać rysunki o dowolnych rozmiarach.

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);}

Niegolfowany + cały program

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);
}

Wynik

Przetwarzanie szkicu Euro


1
Możesz grać w golfa, używając 1zamiast, OPENa także zmieniając 255w backgroundi filldzwoni do-1
Kritixi Lithos
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.