Gerçekten bir rhombus istemiştim, fakat tek sahip olduğum bu aptal dikdörtgendi.


33

Sadece bir düzeltme ve pusula verildiğinde, verilen dikdörtgenin içine bir eşkenar dörtgen yazın ve iki karşıt noktayı paylaşın.

eşkenar dörtgen-in-dikdörtgen

Giriş

Giriş, dikdörtgenin boyutlarıdır. Gösterilen örnekte, bu olurdu 125, 50. Hangi yolla en uygun olursa olsun girişi alabilirsiniz (iki tamsayı, liste, karakter vb.).

Büyük boyut minimum 100, küçük boyut 25 minimum olacaktır. Her ikisi de 200'de.

Çıktı

Çıktı gösteren bir resim (ekranda görüntülenir veya bir dosya olarak kaydedilir) gösterilir

  • Giriş dikdörtgen
  • Tüm "çalışan" hatlar / daireler
  • Yazılı eşkenar dörtgen

farklı renklerde Yukarıdaki resimde, dikdörtgen siyah, çalışma çizgileri mavi ve eşkenar dörtgen turuncudur. Çizgiler listede gösterilen sıraya göre çizilmelidir (örneğin eşkenar dörtgen, çalışma çizgileri ve dikdörtgenin üzerine yazar).

Çıktı görüntüsünün her şeyi içerecek kadar büyük olması gerekir. Örneğin, gösterilen daireler sınırların dışına çıkamaz.

Yöntem

Yukarıdaki örnek resimde kullanılan yöntem:

  • Dikdörtgenin köşegenine eşit bir yarıçap vererek, orta alt sol köşeyi ve çevre üzerindeki bir nokta olarak sağ üst köşeyi kullanarak bir daire çizin.
  • Aynısını yapın, ancak merkez ve çevre noktalarını değiştirin.
  • İki dairenin kesişme noktalarının arasına bir çizgi çizin ve dikdörtgenin köşegenine dik bir bisector verin.
  • Eşkenar dörtgen çizmek için yeni çizgi ve dikdörtgenin kesişme noktalarını kullanın.

Bu işe yarıyor, çünkü bir eşkenar dörtgenin iç köşegenleri her zaman dik olarak ikiye bölünüyor. Bununla birlikte, bunun tam bir kanıtını dahil etmiyorum.

Eşkenar dörtgeninizi almak için tek yöntem bu değildir ve ne yaptığınızı açıklamanız koşuluyla başka birini kullanabilirsiniz. Ben inanıyorum muhtemelen en kolay olsa var.

kurallar

Yalnızca daireler ve çizgiler (veya daha doğrusu çizgi parçaları) çizebilirsiniz. Bir merkez nokta ve çevre nokta ile bir daire tanımlanmıştır. Bir çizgi herhangi iki nokta ile tanımlanır. Çizgilerin belirli bir uzunlukta olması gerekmez, ancak en azından tanımlayıcı noktaları kapsamalıdır (örnek resme dikkat edin: çizgi, daire kesişme noktalarının biraz ötesine geçer, ancak kenara doğru gitmez). Daireler için, merkezden seçilen çevre noktasına kadar olan yarıçap bir çalışma çizgisi olarak kabul edilir ve gösterilmesi gerekir.

Çizgileri rasterleştirmek için, herhangi bir tanınmış algoritmayı (örneğin, Bresenham's) kullanabilir veya dilinizin sahip olduğu herhangi bir yapıya güvenebilirsiniz. Çıktınız vektöre dayalıysa, lütfen giriş dikdörtgeninin en az piksel cinsinden büyüklüğünde bir çözünürlükte gösterildiğinden emin olun . Ayrıca, düz bir tuval üzerine çizim yapacaksınız, bu nedenle lütfen ızgara izlerini veya dışsal çıktıları bastırın.

Hile yok! Noktalar / çizgiler / çevrelerin yerleşimini yalnızca şu ana kadar oluşturduklarınızı kullanarak belirleyebilirsiniz. Çalışma çizgilerinizi / çevrelerinizi bir eşkenar dörtgen göstermek için nasıl kullanacağınızı açıklayamıyorsanız, yanlış yapıyorsunuz demektir.

İstediğiniz karşı nokta çiftini kullanabilirsiniz ve çıktının doğru olması kaydıyla dikdörtgenin eksen hizasına çizilmesi gerekmez .

Girdi her zaman kare olmayan bir dikdörtgen olacaktır, bu nedenle özel kaplama için endişelenmeyin.

Son olarak, bu standart kod golf, yani bayt cinsinden en düşük boyut kazanır.


Çemberlerin kesişimleri arasında çizilen çizginin bitiş noktalarına, örneğin çizildikten sonra (kavşakların nerede olduğunu görmek için görüntüyü ayrıştırmadan) karar vermek için matematiksel bir formül kullanabilir miyiz?
ETHProductions

@ETPovsiyonlar Evet diyebilirim, çünkü yarıçap ile yarıçap arasındaki açının her iki tarafta 60 derece olduğunu ve eşkenar üçgenler oluşturduğunu göstermek oldukça kolaydır. Herhangi birinin itirazı varsa, bunu da duymaya istekliyim.
Geobits

3
İlk girişin ikinciden daha büyük olacağını (veya tersi) olduğunu varsayabilir miyiz, yoksa cevapların hem dikey hem de yatay olarak yönlendirilmiş dikdörtgenleri kullanabilmesi mi gerekir?
Martin Ender

Dikdörtgenin içindeki kısa çizgi bölümünün amacı nedir?
12Me21

Yanıtlar:


11

HTML + JavaScript (ES6), 34 + 353 = 387 bayt

Giriş biçiminde verilmelidir [125,50].

[w,h]=eval(prompt(c=C.getContext("2d"))).sort();d=q=>(c.strokeStyle=q,b);l=(x,y=Z)=>x?c.lineTo(x,y)||l:c.stroke();b=(x,y=H,r)=>(c.beginPath(),r?c.arc(x,y,Math.sqrt(r),0,2*Math.PI):c.moveTo(x,y),l);b(Z=300,Z)(W=Z+w)(W,H=Z+h)(Z,H)(Z)();d`red`(Z,H,s=w*w+h*h)();b(W,Z,s)();b(Z)(W)();b(Z+w/2-h,Z+h/2-w)(H+w/2,W+h/2)();d`lime`(Z)(W-s/2/w)(W)(Z+s/2/w,H)(Z,H)()
<canvas id=C width=800 height=800>

Çok fazla matematik ve çizim var ... Yükseklik izin verildiğine inandığım genişlikten büyükse dikdörtgen yanlara doğru çizilir.


Oooh, 10 bayttan daha az 444: P
Kritixi Lithos

@KritixiLithos Şimdi 10 bayttan daha az 400;-)
ETHproductions

Yükseklik genişlikten büyük olduğunda dikdörtgen eşkenar dörtgen içine yazılır.
Larkeith

1
@Larkeith Oops, bu davaları ele almamız gerektiğini bilmiyordu. 42 bayt pahasına düzeltildi.
ETHProductions,

Birkaç bayttan tasarruf etmek için "getContext` 2d `" (boşluksuz) kullanabilirsiniz (neden `kullanmaları ve
markdown'ı kırmaları gerekirdi

10

Mathematica, 157 148 158 bayt

Martin Ender'e her zamanki yüksek kalitesi ile yorumlarınız için teşekkür ederiz! Bu durumda 9 bayt kaydedildi.

Argümanların her iki sırada da gelebileceği açıklığa kavuşturulduğunda; Telafi etmek için 10 bayt eklendi.

Graphics@{(m=Line)@{o=0{,},{#,0},c={##},{0,#2},o},Blue,m[l={o,c}],Circle[#,(c.c)^.5]&/@l,m[{k={#2,-#},-k}+{c,c}/2],Red,m@{o,p={0,c.c/2/#2},c,c-p,o}}&@@Sort@#&

Yine, Mathematica'nın parladığı yer burası: matematiksel hesaplamayı içeren üst düzey grafik çıktısı. İnsan okunabilirliği için boşluk ve yeni satırlarla aynı kod:

Graphics@{
  (m=Line)@{o = 0{,}, {#, 0}, c = {##}, {0, #2}, o},
  Blue, m[l = {o, c}], Circle[#, (c.c)^.5] & /@ l, 
  m[{k = {#2, -#}, -k} + {c, c}/2],
  Red, m@{o, p = {c.c/2/#2, 0}, c, c - p, o}
} & @@ Sort@# &

Sıralı bir pozitif sayılar çifti olan tek bir argümanın adsız işlevi; final @@ Sort@# &, ilk sayının daha küçük olduğu iki çift argümanına dönüşür. Linenoktadan noktaya bir çokgen yol üretir; ilk ve son noktalar aynı ise, kapalı bir çokgene dönüşür; CircleVerilen merkez ve yarıçapı olan bir daire üretir. Özel noktalar ove c(sol alt ve sağ üst dikdörtgen köşeler), p(matematiksel bir formül ile verilen üçüncü eşkenar dörtgen köşesi) ve k(dikey bisektörün çizilmesine yardımcı olan), tekrar çağrıldığında baytları kaydetme yolu boyunca adlar verilmiştir. Özel nokta çifti gibil = {o,c}. Mathematica doğrudan puan eklemek, her iki koordinatı da aynı faktörle çarpmak, nokta ürünlerini almak, vb.

Argümanlar 125ve örneklerle örnek çıktı 50:

görüntü tanımını buraya girin


1
Gereksiz boşluklar. Bu numarayı bir bayttan tasarruf etmek için kullanabilirsiniz {0,0}. Mavi ve turuncu kullanmanız gerekmediğinden, Redyerine baytları tasarruf edebilirsiniz Orange. LineBaytları kurtarmak için fazlasıyla yeterli olan dört kez kullanıyorsunuz i=Line;(ifadenin nkarakterleri varsa ve mihtiyacınız (m-1)*(n-1) > 4olan süreleri kullanıyorsanız , değişkeni parantez kullanmadan ilk kez atayabilirseniz, genel kural olarak ).
Martin Ender

Bu 0{,}numara harika: D
Greg Martin

Korkarım, ikinci taraf birinciden daha uzunsa bu işe yaramaz. Bu ekleme ile tespit edilebilir Bununla birlikte, yönlendirme, tutarlı olması gerekmez @@Sort@#&ve takas #ve #2kod boyunca ya da alternatif olarak bunun yerine dikey yönlendirme dikdörtgenler ile çalışmak için adapte.
Martin Ender

Evet, kasıtlıydı ... görünüşe göre boyutların istediğimiz sıraya göre gelip gelmediğine dair açıklama bekliyoruz.
Greg Martin


9

MetaPost, 473 (renkli) 353 (renkli)

Renkli (473 bayt):

A:=170;B:=100;pair X,Y;path C,D,E,F,G,R,T;X=(0,0);Y=(A,B);R=X--(A,0)--Y--(0,B)--cycle;T=(0,B)--(A,B);draw R;E=X--Y;C=X..Y*2..cycle;D=Y..-Y..cycle;F=(D intersectionpoint C)--(C intersectionpoint D);draw C withcolor green;draw D withcolor green;draw E withcolor red;draw F withcolor red;draw (F intersectionpoint R)--Y withcolor blue;draw X--(F intersectionpoint T) withcolor blue;draw (F intersectionpoint T)--Y withcolor blue;draw (F intersectionpoint R)--X withcolor blue;

Renksiz (353 bayt):

A:=170;B:=100;pair X,Y;path C,D,E,F,G,R,T;X=(0,0);Y=(A,B);R=X--(A,0)--Y--(0,B)--cycle;T=(0,B)--(A,B);draw R;E=X--Y;C=X..Y*2..cycle;D=Y..-Y..cycle;F=(D intersectionpoint C)--(C intersectionpoint D);draw C;draw D;draw E;draw F;draw (F intersectionpoint R)--Y;draw X--(F intersectionpoint T);draw (F intersectionpoint T)--Y;draw (F intersectionpoint R)--X;

Daha önce hiç ASLA bunu kullanmamıştım ve eminim katleştim ...
Ama bu web sitesinde bunu çalıştırdığınızda:

http://www.tlhiv.org/mppreview/

İkinci ekseni çizmek için dairelerin kesişimini kullanır ve daha sonra son eşkenar dörtgeni çizmek için eksenin ve dikdörtgenin kesişimini kullanır. Her ne kadar hile yaptım ve ilk eksene haha ​​dik bir çizgi çizdim.

Boyutları değiştirmek için, sadece A ve B'yi değiştirin.

Ne olursa olsun, sonunda (L = 170, H = 100 için):

görüntü


3

Desmos, 375 (veya 163) bayt

w=125
h=50
\left(wt,\left[0,h\right]\right)
\left(\left[0,w\right],ht\right)
\left(x-\left[0,w\right]\right)^2+\left(y-\left[0,h\right]\right)^2=w^2+h^2
\frac{h}{w}x\left\{0\le x\le w\right\}
-\frac{w}{h}\left(x-\frac{w}{2}\right)+\frac{h}{2}
a=\frac{h^2}{2w}+\frac{w}{2}
\left(t\left(w-a\right)+\left[0,1\right]a,ht\right)
\left(at-\left[0,a-w\right],\left[0,h\right]\right)

wve hgirişlerdir. Desmos'ta dene!

Alternatif 163 bayt sürümü:

w=125
h=50
(wt,[0,h])
([0,w],ht)
(x-[0,w])^2+(y-[0,h])^2=w^2+h^2
hx/w\left\{0\le x\le w\right\}
-w(x-w/2)/h+h/2
a=h^2/2/w+w/2
(t(w-a)+[0,1]a,ht)
(at-[0,a-w],[0,h])

Bu sürüm, her satırın kopyalanmasını ve her ayrı satıra Desmos'a yapıştırılmasını gerektirir. Meta'nın bunun geçerli bir sayma yöntemi olup olmadığına karar vermesi gerekiyor, ancak önceki yöntem kesinlikle iyi.


Bu, giriş dikdörtgeninin görevde belirtilmeyen yatay yönde olduğunu varsayıyor gibi görünüyor.
Henning Makholm

1
Bana göre, "dikdörtgenin eksen hizalı çizilmesine gerek yok", korunması gereken yatay ve dikey dahil, dikdörtgenin üzerinde önceden belirlenmiş bir yönlendirme olmadığı anlamına gelir.
Greg Martin

Yalnızca boyut verildiğinden (koordinatlar olmadığından), boyutun doğru olduğunu varsayarak çıktı istediğiniz şekilde hizalanabilir.
Geobits

İlk kez
Desmos'un

3

ImageMagick Sürüm 7.0.3 + bash + sed, 496 bayt

M=magick
L=$((400-$(($1))/2)),$((400+$(($2))/2))
R=$((400+$(($1))/2)),$((400-$(($2))/2))
Z=" $L $R" Y=" -1 x";D=' -draw' K=' -stroke'
A=' -strokewidth 3 +antialias -fill'
$M xc:[800x]$A none$K \#000$D "rectangle$Z"$D "line$Z"$K \#00F8$D "circle$Z"$K \#0F08$D "circle $R $L" -depth 8 png:a
$M a txt:-|sed "/38C/!d;s/:.*//">x;P=`head$Y`;Q=`tail$Y`
$M a$A \#F008$K \#F008$D "line $P $Q" b
$M b txt:-|sed "/C70/!d;s/:.*//">x;S=`head$Y`;T=`tail$Y`
$M b$A \#F804$K \#F80$D "polyline $L $S $R $T $L" x:

"Rhombus.sh 180 120" ile sonuç

görüntü tanımını buraya girin

Daha kesin (57x800 yerine 6400x6400 tuval kullanarak), 570 bayt

Kavşaklar kesin değildir; "strokewidth" yönergesi, çizgilerin en az bir pikselin sadece kesişen çizgilerin renkleri ile karışmasını sağlayacak kadar geniş kılar, ancak en kötü durumlarda (25x200 ve 200x25) geçişler küçük bir açıdadır, böylece bulut karışık piksellerin sayısı birkaç pikseldir ve ilk ve son karışık pikseli seçtiğimizden, küçük bir hata vardır. Aynı sağlamlıkta 8x daha büyük bir tuval kullanmak ve ardından sonucu küçültmek hatayı bir piksele daha az, ancak yaklaşık 64 kat ceza alır.

M=magick
L=$((3200-$(($1))*4)),$((3200+$(($2))*4))
R=$((3200+$(($1))*4)),$((3200-$(($2))*4))
K=-stroke;A='-strokewidth 3 +antialias'
$M xc:[6400x] $A -fill none $K \#000 -draw "rectangle $L $R" \
-draw "line $L $R" $K \#00F8 -draw "circle $L $R" \
$K \#0F08 -draw "circle $R $L" -depth 8 png:a 
$M a txt:-|grep 38C077|sed -e "s/:.*//p">x
P=`head -1 x`;Q=`tail -1 x`
$M a $A -fill \#F008 $K \#F008 -draw "line $P $Q" png:b
$M b txt:-|grep C70000|sed -e "s/:.*//p">x
S=`head -1 x`;T=`tail -1 x`
$M b $A -fill \#F804 $K \#F80 -draw "polyline $L $S $R $T $L" -resize 800 x:

Kesin 6400x6400'e karşı normal 800x800'ün sonuçları:

normal ve kesin sonuç

Ungolfed:

# rhombus.sh
# Inscribe a rhombus in the rectangle with dimensions 2*$1, 2*$2

# Run with "rhombus.sh W H"

M=magick

W=${1:-100};H=${2:-40}

# L locates the lower left corner of the rectangle
L=$((400-$((W))/2)),$((400+$((H))/2))

# R locates the upper right corner of the rectangle
R=$((400+$((W))/2)),$((400-$((H))/2))

# We'll need this several times
A='-strokewidth 3 +antialias'

# Establish 800x800 canvas (white) (circles + rectangle will
# always fit in 764x764)
#
# Draw the W x H rectangle (black) in center of canvas
#
# Draw two circles (blue, 50% alpha [#00F8] and green, 50% alpha [#0F08])
#  one centered at point L with peripheral point R
#  the other centered at point R with peripheral point L

$M xc:[800x] $A -fill none \
       -stroke \#000  -draw "rectangle $L $R" \
                      -draw "line      $L $R" \
       -stroke \#00F8 -draw "circle    $L $R" \
       -stroke \#0F08 -draw "circle    $R $L" \
       -depth 8 a.png 

# Find P and Q, the 2 intersections of the circles,
# that have mixed color #38C077 
$M a.png txt:-|grep 38C077|sed -e "s/:.*//p">x
P=`head -1 x`;Q=`tail -1 x`

# Draw line connecting the intersections P and Q
$M a.png $A -fill \#F008 -stroke \#F008 -draw "line $P $Q" b.png

# Find S and T, the 2 intersections of the line with the original rectangle,
# that have mixed color #C70000
$M b.png txt:-|grep C70000|sed -e "s/:.*//p">x
S=`head -1 x`;T=`tail -1 x`

# Draw the rhombus
$M b.png $A -fill \#F804 -stroke \#F80 -draw "polyline $L $S $R $T $L" d.png

Kavşakları algılama şeklini seviyorum, çok hoş. Son karışık renk doğru mu? Soruyorum çünkü eşkenar dörtgen ve dikdörtgen çizgiler biraz kapalı görünüyor. Kenar yumuşatma nedeniyle rengin biraz kapalı bir noktada tespit edildiğini düşündüm (muhtemelen strok genişliği de olabilir).
Geobits

2

R, 290 bayt

function(A,B,p=polygon){R=A^2+B^2
D=2*A
a=sqrt(R)*cbind(cos(t<-seq(0,2*pi,.01)),sin(t))
b=t(t(a)+c(A,B))
x=range(a,b)
plot(NA,xli=x,yli=x,as=1,ax=F,an=F)
rect(0,0,A,B)
segments(0,0,A,B,c=4)
p(a,b=4)
p(b,b=4)
curve(B/2-A*x/B+A^2/2/B,co=4,a=T)
p(cbind(c((R-2*B^2)/D,A,R/D,0),c(B,B,0,0)),b=3)}

Anonim işlev, çıktı ekranda görüntülenir. Biraz ungolfed, yorumlarla:

function(A,B){
    R=A^2+B^2
    D=2*A
    t=seq(0,2*pi,.01)
    a=sqrt(R)*cbind(cos(t),sin(t)) #Circle with (0,0) as center
    b=t(t(a)+c(A,B)) #Second circle transposed to (A,B) center
    x=range(a,b)
    #Empty plot, large enough to fit the 2 circles:
    plot(NA,xlim=x,ylim=x,asp=1,axes=F,ann=F)
    rect(0,0,A,B) #Initial rectangle
    segments(0,0,A,B,col=4) #Rectangle diagonal
    polygon(a,border=4) #Circle 1 (border is b thanks to partial matching)
    polygon(b,border=4) #Circle 2
    curve(B/2-A*x/B+A^2/2/B,col=4,add=T) #Line joining circles intersection
    polygon(cbind(c((R-2*B^2)/D,A,R/D,0),c(B,B,0,0)),border=3) #Rhombus
}

(120,100) için örnek çıktı:

görüntü tanımını buraya girin


2

LibreLogo , 270 bayt

Kullanıcı girişi bir dizi olarak alınır: [width, height]veya [height, width].

Kod:

fc [24]
D=180
R=sorted(eval(input "))
W=R[1]
H=R[0]
L=sqrt W**2+H**2
A=D/π*asin(H/L)
Z=A*2
S=L/2/cos A*π/D rectangle[W,H]pc 255 lt A fd 400 bk 800 fd 400 rt A pu bk H/2 lt 90 fd W/2 pd circle L*2 rt D-A fd L circle L*2 pc [5]lt D-A fd S lt Z fd S rt D+Z fd S lt Z fd S

Sonuç:

görüntü tanımını buraya girin

Açıklama:

fc [24]                        ; Fill Color = Invisible
D = 180                        ; D = 180° (Saved Bytes)
R = sorted( eval( input " ) )  ; R = Sorted Array of Rectangle Width and Height (User Input)
W = R[1]                       ; W = Rectangle Width
H = R[0]                       ; H = Rectangle Height
L = sqrt W**2 + H**2           ; L = Rectangle Diagonal Length
A = D / π * asin( H / L )      ; A = Rectangle Diagonal Angle°
Z = A * 2                      ; Z = Rectangle Diagonal Angle° * 2 (Saved Bytes)
S = L / 2 / cos A * π / D      ; S = Rhombus Side Length
rectangle [W, H]               ; Draw Rectangle
pc 255                         ; Pen Color = Blue
lt A                           ; Left = Rectangle Diagonal Angle°
fd 400                         ; Forward = 400 pt
bk 800                         ; Back = 800 pt
fd 400                         ; Forward = 400 pt
rt A                           ; Right = Rectangle Diagonal Angle°
pu                             ; Pen Up
bk H / 2                       ; Back = Rectangle Height / 2
lt 90                          ; Left = 90°
fd W / 2                       ; Forward = Rectangle Width / 2
pd                             ; Pen Down
circle L * 2                   ; Draw Left Circle (Radius = Rectangle Diagonal Length)
rt D - A                       ; Right = 180° - Rectangle Diagonal Angle°
fd L                           ; Forward = Rectangle Diagonal Length
circle L * 2                   ; Draw Right Circle (Radius = Rectangle Diagonal Length)
pc [5]                         ; Pen Color = Red
lt D - A                       ; Left = 180° - Rectangle Diagonal Angle°
fd S                           ; Forward = Rhombus Side Length
lt Z                           ; Left = Rectangle Diagonal Angle° * 2
fd S                           ; Forward = Rhombus Side Length
rt D + Z                       ; Right = 180° + Rectangle Diagonal Angle° * 2
fd S                           ; Forward = Rhombus Side Length
lt Z                           ; Left = Rectangle Diagonal Angle° * 2
fd S                           ; Forward = Rhombus Side Length

1

Python 3.5 + Tkinter, 433 veya 515 bayt

Renkli Olmayan (433 bytes):

from tkinter import*
def V(a,b):S=500;Y,Z=S+a,S-b;M=(a**2+b**2)**0.5;D=Tk();C=Canvas(D);B=C.create_oval;X=C.create_line;B(S+M,S-M,S-M,S+M);B(Y-M,Z+M,Y+M,Z-M);X(Y,Z,S,S);C.create_rectangle(Y,S,S,Z);Q=-((Z-S)/(Y-S))**-1;U,V=(Y+S)/2,(Z+S)/2;X(U+M,V+M*Q,U-M,V-M*Q);P=[(Y,Q*(Y-U)+V),(((Z-V)/Q)+U,Z)][a>b];L=[(S,Q*(S-U)+V),(((S-V)/Q)+U,S)][a>b];X(S,S,P[0],P[1]);X(Y,Z,P[0],P[1]);X(Y,Z,L[0],L[1]);X(S,S,L[0],L[1]);C.pack(fill=BOTH,expand=1)

Renkli (515 bayt):

from tkinter import*
def V(a,b):S=500;t='blue';Y,Z=S+a,S-b;M=(a**2+b**2)**0.5;D=Tk();C=Canvas(D);B=C.create_oval;X=C.create_line;B(S+M,S-M,S-M,S+M,outline=t);B(Y-M,Z+M,Y+M,Z-M,outline=t);X(Y,Z,S,S,fill=t);C.create_rectangle(Y,S,S,Z);Q=-((Z-S)/(Y-S))**-1;U,V=(Y+S)/2,(Z+S)/2;X(U+M,V+M*Q,U-M,V-M*Q,fill=t);P=[(Y,Q*(Y-U)+V),(((Z-V)/Q)+U,Z)][a>b];L=[(S,Q*(S-U)+V),(((S-V)/Q)+U,S)][a>b];o='orange';X(S,S,P[0],P[1],fill=o);X(Y,Z,P[0],P[1],fill=o);X(Y,Z,L[0],L[1],fill=o);X(S,S,L[0],L[1],fill=o);C.pack(fill=BOTH,expand=1)

Girdiyi virgülle ayrılmış sayılar olarak alan bir adlandırılmış işlev. Çıktı, tam çıktısını görmek için yeniden boyutlandırmanız gerekebilecek ayrı bir pencerede verilmiştir. İşte bunun için renkli bir örnek V(180,130):

Örnek çıktı


0

SmileBASIC, 280 bayt

INPUT W,H
W=MAX(W,H)/4H=MIN(W,H)/4D=SQR(W*W+H*H)N=D+W
M+D+H
GBOX D,D,N,M,#RED
GCIRCLE D,M,D
GCIRCLE N,D,D
GLINE D,M,N,D
X=D+W/2Y=D+H/2A=ATAN(W,H)E=D*H/W/2S=E*COS(A)T=E*SIN(A)GLINE X-S*9,Y-T*9,X+S*9,Y+T*9GCOLOR-#L
GLINE D,M,X-S,Y-T
GLINE D,M,X+S,M
GLINE N,D,X+S,Y+T
GLINE N,D,X-S,D

(Ekran görüntüsü / açıklama yakında yayınlanacaktır) Arka plan rengi siyah, dikdörtgen kırmızı, daireler ve çizgiler beyaz ve eşkenar dörtgen sarıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.