Tôi thực sự muốn một hình thoi, nhưng tất cả những gì tôi nhận được là hình chữ nhật ngu ngốc này


33

Chỉ đưa ra một đường thẳng và la bàn, ghi một hình thoi bên trong hình chữ nhật đã cho, chia sẻ hai điểm đối diện.

hình thoi trong hình chữ nhật

Đầu vào

Đầu vào là kích thước của hình chữ nhật. Trong ví dụ hiển thị, đó sẽ là 125, 50. Bạn có thể lấy đầu vào theo bất kỳ cách nào thuận tiện nhất (như hai số nguyên, danh sách, chuỗi, v.v.).

Kích thước lớn hơn sẽ là tối thiểu 100, trong khi kích thước nhỏ hơn sẽ là tối thiểu 25. Cả hai nắp ở mức 200.

Đầu ra

Đầu ra sẽ là một hình ảnh (hiển thị trên màn hình hoặc được lưu dưới dạng tệp) hiển thị

  • Hình chữ nhật đầu vào
  • Tất cả các dòng / vòng tròn "làm việc"
  • Hình thoi được khắc

trong màu sắc riêng biệt. Trong hình trên, Hình chữ nhật có màu đen, đường làm việc màu xanh lam và hình thoi màu cam. Các dòng nên được vẽ theo thứ tự hiển thị trong danh sách (ví dụ hình thoi ghi đè lên các dòng làm việc và hình chữ nhật).

Hình ảnh đầu ra cần phải đủ lớn để chứa mọi thứ. Ví dụ: các vòng tròn hiển thị không thể vượt quá giới hạn.

phương pháp

Phương pháp được sử dụng trong hình ảnh ví dụ ở trên là:

  • Vẽ một vòng tròn sử dụng góc dưới bên trái làm trung tâm và phía trên bên phải làm điểm trên chu vi, cho bán kính bằng đường chéo của hình chữ nhật.
  • Làm tương tự, nhưng hoán đổi trung tâm và điểm chu vi.
  • Vẽ một đường thẳng giữa các giao điểm của hai vòng tròn, cho một đường phân giác vuông góc với đường chéo của hình chữ nhật.
  • Sử dụng các giao điểm của dòng mới và hình chữ nhật để vẽ hình thoi.

Điều này hoạt động vì các đường chéo bên trong của một hình thoi luôn vuông góc với nhau. Tôi không bao gồm một bằng chứng đầy đủ về điều này ở đây, mặc dù.

Đây không phải là phương pháp duy nhất để có được hình thoi của bạn và bạn có thể sử dụng một phương pháp khác, với điều kiện bạn giải thích những gì bạn đang làm. Tôi tin rằng nó có thể là dễ nhất, mặc dù.

Quy tắc

Bạn chỉ có thể vẽ các vòng tròn và đường (hoặc đúng hơn là các đoạn đường). Một vòng tròn được xác định với điểm trung tâm và điểm chu vi. Một dòng được xác định bởi bất kỳ hai điểm. Các dòng không phải có bất kỳ độ dài xác định nào, nhưng ít nhất chúng phải bao gồm các điểm xác định (lưu ý hình ảnh ví dụ: dòng đi qua một chút các giao điểm của vòng tròn, nhưng không đi ra cạnh). Đối với các vòng tròn, bán kính từ tâm đến điểm chu vi đã chọn được coi là một đường làm việc và phải được hiển thị.

Để rasterize các dòng, bạn có thể sử dụng bất kỳ thuật toán được công nhận nào (ví dụ: Bresenham's) hoặc dựa vào bất kỳ nội dung nào mà ngôn ngữ của bạn có thể có. Nếu đầu ra của bạn dựa trên vectơ, vui lòng đảm bảo rằng nó được hiển thị ở độ phân giải ít nhất bằng hình chữ nhật đầu vào tính bằng pixel. Ngoài ra, bạn sẽ vẽ trên một khung vẽ đơn giản, vì vậy vui lòng loại bỏ bất kỳ dấu lưới hoặc đầu ra không liên quan nào.

Không gian lận! Bạn chỉ có thể xác định vị trí của các điểm / đường / vòng tròn bằng cách sử dụng những gì bạn đã thiết lập cho đến nay. Nếu bạn không thể giải thích cách sử dụng các đường / vòng tròn làm việc của mình để hiển thị đó là hình thoi, bạn đã làm sai.

Bạn có thể sử dụng bất kỳ cặp điểm đối diện nào bạn muốn và hình chữ nhật không cần phải được căn chỉnh theo trục, miễn là đầu ra là chính xác.

Đầu vào sẽ luôn là một hình chữ nhật không vuông, vì vậy đừng lo lắng về vỏ đặc biệt đó.

Cuối cùng, đây là mã golf tiêu chuẩn, vì vậy kích thước thấp nhất tính bằng byte sẽ thắng.


Chúng ta có thể sử dụng một công thức toán học để quyết định, ví dụ: các điểm cuối của đường được vẽ giữa các giao điểm của vòng tròn một khi chúng đã được vẽ (mà không thực sự phân tích hình ảnh để xem vị trí của các giao điểm)?
Sản xuất ETH

@ETHproductions Tôi nói có, vì khá dễ dàng để chỉ ra rằng góc giữa chúng và bán kính là 60 độ ở mỗi bên và chúng tạo thành các hình tam giác đều. Nếu bất cứ ai có bất kỳ phản đối, tôi cũng sẵn sàng nghe điều đó.
Geobits

3
Chúng ta có thể giả sử rằng đầu vào đầu tiên sẽ lớn hơn đầu vào thứ hai (hoặc ngược lại), hoặc các câu trả lời phải có khả năng xử lý cả hình chữ nhật theo chiều dọc và chiều ngang?
Martin Ender

Mục đích của đoạn ngắn bên trong hình chữ nhật là gì?
12Me21

Câu trả lời:


11

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

Đầu vào nên được đưa ra trong định dạng [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>

Chỉ cần nhiều toán học và vẽ ... Hình chữ nhật được vẽ sang một bên nếu chiều cao lớn hơn chiều rộng, mà tôi tin là được phép.


Oooh, ít hơn 10 byte so với 444: P
Kritixi Lithos

@KritixiLithos Bây giờ tôi ít hơn 10 byte 400;-)
Sản phẩm ETH

Hình chữ nhật trở nên được ghi trong hình thoi khi chiều cao lớn hơn chiều rộng.
Larkeith

1
@Larkeith Rất tiếc, không biết chúng tôi phải trả những trường hợp đó. Đã sửa với giá 42 byte.
Sản xuất ETH

Bạn có thể sử dụng "getContext` 2d`" (không có dấu cách) để lưu một vài byte (tại sao họ phải sử dụng `và break markdown ...)
12Me21

10

Toán học, 157 148 158 byte

Cảm ơn Martin Ender cho ý kiến ​​với chất lượng cao thông thường của họ! 9 byte được lưu trong trường hợp này.

Đã chỉnh sửa một khi đã được làm rõ rằng các đối số có thể đến theo thứ tự; Thêm 10 byte để bù.

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

Một lần nữa, đây là nơi Mathicala tỏa sáng: đầu ra đồ họa cấp cao liên quan đến tính toán toán học. Cùng một mã với khoảng trắng và dòng mới cho khả năng đọc của con người:

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

Hàm không tên của một đối số duy nhất là một cặp số dương có thứ tự; cuối cùng @@ Sort@# &chuyển đổi cặp thành hai đối số số trong đó số đầu tiên là nhỏ hơn. Linetạo ra một đường đa giác từ điểm này sang điểm khác, nó sẽ biến thành một đa giác khép kín nếu điểm đầu tiên và điểm cuối giống nhau; Circletạo ra một vòng tròn với tâm và bán kính cho trước. Các điểm đặc biệt oc(các góc hình chữ nhật phía dưới bên trái và phía trên bên phải), p(góc hình thoi thứ ba, được đưa ra bởi một công thức toán học) và k(giúp vẽ đường phân giác vuông góc) được đặt tên dọc đường để lưu byte khi được gọi lại , như là cặp điểm đặc biệtl = {o,c}. Mathematica rất vui khi thêm điểm trực tiếp, nhân cả hai tọa độ cho cùng một yếu tố, lấy sản phẩm chấm của chúng, v.v., tất cả đều đơn giản hóa mã.

Đầu ra mẫu, với các đối số 12550:

nhập mô tả hình ảnh ở đây


1
Re khoảng trắng không cần thiết. Bạn có thể sử dụng thủ thuật này để lưu một byte trên {0,0}. Vì không có yêu cầu sử dụng màu xanh và màu cam, bạn có thể lưu byte bằng cách sử dụng Redthay vì Orange. Bạn đang sử dụng Linebốn lần, quá đủ để lưu byte từ i=Line;(như một quy tắc chung, nếu biểu thức có các nký tự và bạn sử dụng số mlần bạn cần (m-1)*(n-1) > 4, ít hơn nếu bạn có thể gán biến trong lần sử dụng đầu tiên mà không cần dấu ngoặc đơn).
Martin Ender

0{,}Thủ thuật đó thật tuyệt vời: D
Greg Martin

Tôi sợ điều này không hoạt động nếu bên thứ hai dài hơn bên thứ nhất. Tuy nhiên, hướng không cần nhất quán, do đó, điều này có thể được khắc phục bằng cách nối thêm @@Sort@#&và hoán đổi ##2trong toàn bộ mã hoặc thay vào đó điều chỉnh nó để hoạt động với hình chữ nhật hướng dọc.
Martin Ender

Vâng, đó là cố ý ... có vẻ như chúng tôi đang chờ làm rõ về việc liệu chúng tôi có thể giả định kích thước theo thứ tự chúng tôi muốn hay không.
Greg Martin


9

MetaPost, 473 (có màu) 353 (không có màu)

Màu (473 byte):

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;

Không tô màu (353 byte):

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;

Chưa bao giờ EVER sử dụng cái này trước đây và tôi chắc chắn rằng tôi đã đánh cắp nó ...
Nhưng khi bạn chạy nó trên trang web này:

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

Nó sử dụng giao điểm của các vòng tròn để vẽ trục thứ hai, sau đó sử dụng giao điểm của trục và hình chữ nhật để vẽ hình thoi cuối cùng. Mặc dù tôi đã có thể lừa dối và chỉ vẽ một đường vuông góc với trục đầu tiên haha.

Để thay đổi kích thước, chỉ cần thay đổi A và B.

Bất kể, bạn kết thúc với (cho L = 170, H = 100):

Hình ảnh


3

Desmos, 375 (hoặc 163) byte

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)

whlà đầu vào. Hãy thử nó trên Desmos!

Phiên bản thay thế 163 byte:

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

Phiên bản này yêu cầu mỗi dòng phải được sao chép và dán vào từng dòng riêng biệt vào Desmos. Meta vẫn cần phải quyết định xem đây có phải là phương pháp đếm hợp lệ hay không, nhưng phương thức trước đây chắc chắn là ổn.


Điều này dường như giả định rằng hình chữ nhật đầu vào là theo hướng ngang, không được chỉ định trong tác vụ.
Henning Makholm

1
Đối với tôi, "hình chữ nhật không cần phải được vẽ theo trục" ngụ ý rằng không có định hướng được xác định trước trên hình chữ nhật, bao gồm cả phong cảnh so với chân dung, cần được bảo tồn.
Greg Martin

Vì chỉ kích thước được đưa ra (không phải tọa độ), đầu ra có thể được căn chỉnh theo cách bạn muốn, giả sử kích thước là chính xác.
Geobits

Lần đầu tiên tôi thấy Desmos được sử dụng như một ngôn ngữ chơi gôn :)
Kritixi Lithos

3

ImageMagick Phiên bản 7.0.3 + bash + sed, 496 byte

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:

Kết quả với "rhombus.sh 180 120"

nhập mô tả hình ảnh ở đây

Chính xác hơn (sử dụng canvas 6400x6400 thay vì 800x800), 570 byte

Các giao lộ không chính xác; Chỉ thị "Stroference" làm cho các đường đủ rộng để đảm bảo ít nhất một pixel được trộn lẫn với chỉ các màu của hai đường giao nhau, nhưng trong trường hợp xấu nhất (25x200 và 200x25), các giao điểm nằm ở một góc nhỏ nên đám mây pixel hỗn hợp dài vài pixel và vì chúng tôi chọn pixel hỗn hợp đầu tiên và cuối cùng, nên có một lỗi nhỏ. Sử dụng một khung vẽ lớn hơn 8 lần với cùng độ rộng băng thông và sau đó thu nhỏ kết quả xuống sẽ giảm lỗi xuống dưới một pixel, nhưng ở mức phạt khoảng 64 lần.

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:

Kết quả 800x800 bình thường so với 6400x6400 chính xác:

kết quả bình thường và chính xác

Ung dung:

# 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

Tôi thích cách bạn phát hiện các giao lộ, rất tốt đẹp. Là màu hỗn hợp cuối cùng chính xác? Tôi hỏi bởi vì có vẻ như hình thoi và đường hình chữ nhật hơi tắt. Tôi nghĩ có lẽ màu sắc đã được phát hiện ở một vị trí hơi lệch do khử răng cưa (có thể cả chiều rộng nét).
Geobits

2

R, 290 byte

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

Chức năng ẩn danh, đầu ra được hiển thị trên màn hình. Hơi vô dụng, với ý kiến:

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
}

Ví dụ đầu ra cho (120.100):

nhập mô tả hình ảnh ở đây


2

LibreLogo , 270 byte

Đầu vào của người dùng được lấy dưới dạng một mảng: [width, height]hoặc [height, width].

Mã số:

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

Kết quả:

nhập mô tả hình ảnh ở đây

Giải trình:

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 hoặc 515 byte

Không màu (433 byte):

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)

Màu (515 byte):

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)

Hàm được đặt tên nhận đầu vào là 2 số được phân tách bằng dấu phẩy. Đầu ra được đưa ra trong một cửa sổ riêng mà bạn có thể phải thay đổi kích thước để xem toàn bộ đầu ra. Đây là một mẫu đầu ra màu cho V(180,130):

Đầu ra mẫu


0

SmileBASIC, 280 byte

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

(Ảnh chụp màn hình / giải thích sẽ được đăng sớm) Màu nền là màu đen, hình chữ nhật màu đỏ, hình tròn và đường kẻ màu trắng và hình thoi có màu vàng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.