パイソンカメを使ってスマイルを描きたいと思います。サークルの範囲は、私がしようとしている120 なりますパイソンカメを使ってスミル(円弧)を描く方法
import turtle
turtle.circle(100)
turtle.up()
turtle.goto(0, 30)
turtle.down()
turtle.circle(40, 120)
次の問題は、一部の笑顔です。どのように顔の笑顔を描く?
パイソンカメを使ってスマイルを描きたいと思います。サークルの範囲は、私がしようとしている120 なりますパイソンカメを使ってスミル(円弧)を描く方法
import turtle
turtle.circle(100)
turtle.up()
turtle.goto(0, 30)
turtle.down()
turtle.circle(40, 120)
次の問題は、一部の笑顔です。どのように顔の笑顔を描く?
turtle
モジュールでは、円または放物線の弧を捨てるための高度な方法はありませんが、正しい方程式を思いつくのは難しくありません。
(x0, y0)
と半径r
を原点とする円C
は式で記述されています
(x-x0)^2 + (y-y0)^2 = r^2
私たちは、取得するには、これを拡張することができます。
x^2 -2x·x0 + x0^2 + y^2 -2y·y0 + y0^2 - r^2 = 0
今、私たちは、として例えばy
を取ることができます2次方程式を得る:
y^2 -2y0·y +(x^2-2x0·x+x0^2+y0^2-r^2) = 0
Let d = x^2-2x0·x+x0^2+y0^2-r^2
。私たちは、いつもの式を使用してこの問題を解決することができます。だから今あなたがx
のために円の中心と半径の座標与え、機能、および値を書き留めることができ、それは座標y
を返し
y1 = (2y0 + sqrt(4y0^2 - 4d))/2 = y0 + sqrt(y0^2 - d)
y2 = (2y0 - sqrt(4y0^2 - 4d))/2 = y0 - sqrt(y0^2 - d)
をし、カメを移動するためにこれらの座標を使用します。同様に
def find_circle_coord(x0, y0, r, x):
d = x**2 - 2*x0*x + x0**2 + y0**2 - r**2
D = y0**2 - d
if D < 0:
raise ValueError("Value for x is outside the circle!")
return y0 - D**.5, y0 + D**.5
:
>>> # bob is a turtle
>>> bob.pendown()
>>> for x in range(-50, 50):
... y1, _ = find_circle_coord(0, 0, 100, x)
... bob.goto(x, y1)
2つの座標のいずれかを選択することでヨーヨーを返さ「上」または「下」の円弧を描くかどうかを選択します。
笑顔を描くには、2つの円を1つ小さくして大きなものを出すだけですが、前のものよりわずかに上に中央があるので、そのような交差点があります。
だから、半径r
と半径R > r
とx0, y0+K
を中心とする円C2
とx0, y0
を中心とする円C1
を選択する必要があります。 C2の中心がC1中心に垂直に配置されていることに注意してください(それで、中心の座標はx
と同じですが、それは上です)。y
軸の向きがわからないのでは-K
...)
あなたは自分の方程式を解くために持っている交差点を見つけるために:
(x-x0)^2 + (y-y0)^2-r^2 = 0
(x-x0^2) + (y-y0-K)^2-R^2 = 0
今、最初のあなたが得るからの第2式引い:
あなたが得る(y-y0)^2 - (y-y0-K)^2 -r^2 + R^2 = 0
y^2 -2y·y0 +y0^2 - y^2 -y0^2 -K^2 +2y·y0 +2K·y -2K·y0 -r^2 + R^2 = 0
-K^2 +2K·y -2K·y0 -r^2 + R^2 = 0
を:
をy = (K^2 +2K·y0 +r^2 -R^2)/(2K)
円の方程式の1つにy
を代入することができますそのようなy
に対応するx
を得る。それでfind_circle_coord
を使って描画するのはx
です。
口をもっと開いてみたい場合は、円と放物線を使うことができます。
def find_parabola_coord(a, b, c, x):
return a*x**2 + b*x + c
それとも、その頂点V = (xv, yv)
与えられた放物線の方程式の形式を使用できます:放物型その上の点のy
値を見つけるには簡単だ
y - yv = a(x - xv)^2
a
制御方法を急放物線がある。
亀のモジュールが提供するコマンドで笑顔(とスマイリーフェイス)を行うことができます。正しく描画(円の)あなたの円弧を取得するための鍵は、goto()
とsetheading()
の組み合わせであり、以下を参照:
import turtle
turtle.up()
turtle.goto(0, -100) # center circle around origin
turtle.down()
turtle.begin_fill()
turtle.fillcolor("yellow") # draw head
turtle.circle(100)
turtle.end_fill()
turtle.up()
turtle.goto(-67, -40)
turtle.setheading(-60)
turtle.width(5)
turtle.down()
turtle.circle(80, 120) # draw smile
turtle.fillcolor("black")
for i in range(-35, 105, 70):
turtle.up()
turtle.goto(i, 35)
turtle.setheading(0)
turtle.down()
turtle.begin_fill()
turtle.circle(10) # draw eyes
turtle.end_fill()
turtle.hideturtle()
turtle.done()
私はマスターし、位置決め弧を持っていると主張するつもりはない、私はまだやっていますあまりにも多くの試行錯誤がありますが、時間をかけて亀のオペレータがどのように働くかを知ることが可能です。
おかげでたくさん@Bakuriu。私は、座標ジオメトリの基本に戻る必要があることを理解していませんでした。 –
@AmitJaiswalこのような種類のものを用意しているサードパーティのパッケージがあるかもしれませんが、これを提供していないような "カメ"のドキュメントを見ると、とにかく、この種の機能を自分で実装するのは興味深い練習です。 – Bakuriu