Python_Turtle绘制[椭圆柱体]函数(采用二维面叠法绘制三维立体)(turtle实现)
目录
【点动成线】
【线动成面】
- 1.FaceToVolume.py
- 2.结果示例
- 3.动态图展示画法
【点动成线】
【线动成面】
【注】本文包含了前面介绍过的描点画线法、描线画面法,以及本次的叠面成体法。
【注1】采用面动成体的原理,使用二维平面去绘制三维立体模型!
【注2】密集的叠加(描)平面图形即可!
【注3】采用斜二测画法(x与y夹角45度),其中在xoy平面上,x值不变,y是直角坐标时Y的一半。
1.FaceToVolume.py
import turtle as tle
import math
def turtleSet():
tle.speed(0)
tle.delay(0)
tle.pensize(2)
tle.pencolor("blue")
#tle.tracer(True)
tle.tracer(False)
def CreateXYZ():
tle.pencolor("black")
tle.penup()
tle.goto(0,0)
tle.seth(0)
tle.pendown()
tle.goto(200,0)
tle.seth(135)
tle.fd(10)
tle.penup()
tle.goto(200,0)
tle.pendown()
tle.seth(-135)
tle.fd(10)
tle.penup()
tle.goto(203,0)
tle.write("x(X)",font=("宋体",16,"normal"))
tle.penup()
tle.goto(0,0)
tle.seth(0)
tle.pendown()
tle.goto(-200,0)
tle.penup()
tle.goto(0,0)
tle.seth(45)
tle.pendown()
tle.fd(210)
tle.penup()
tle.fd(3)
tle.write("y",font=("宋体",16,"normal"))
tle.bk(3)
tle.pendown()
tle.seth(-180)
tle.fd(10)
tle.penup()
tle.bk(10)
tle.pendown()
tle.seth(-90)
tle.fd(10)
tle.penup()
tle.bk(10)
tle.penup()
tle.goto(0,0)
tle.seth(-135)
tle.pendown()
tle.fd(200)
tle.penup()
tle.goto(0,0)
tle.seth(90)
tle.pendown()
tle.fd(200)
tle.penup()
tle.fd(3)
tle.write("z(Y)",font=("宋体",16,"normal"))
tle.pendown()
tle.seth(-135)
tle.fd(10)
tle.penup()
tle.bk(10)
tle.pendown()
tle.seth(-45)
tle.fd(10)
tle.penup()
tle.bk(10)
tle.penup()
tle.goto(0,0)
tle.seth(-90)
tle.pendown()
tle.fd(200)
tle.penup()
def subline(x,coll,z,y=[]):
tle.pencolor(coll)
tle.penup()
for y0 in y:
if math.fabs(y0 - z) <= 0.0001:
#print("OK",x,y0,z)
tle.goto(x,0+z)
tle.pendown()
tle.dot(1)
tle.penup()
else:
tle.goto(x,0+z)
tle.pendown()
tle.seth(45)
tle.fd(y0/2)
tle.bk(y0)
tle.penup()
def subface(z,coll):
k = 0
i = -150
while(i<=150):
if k == 1:
k = 0
y = []
y.append(math.sqrt(2500-i*i*(1/9)))
subline(i,coll,z,y)
i = i + 1
k = k + 1
def CreateV():
z = -50
col = ["blue","green","orange"]
k = 0
while z <= 50:
if k == 3:
k = 0
if z == -50 or z == 50:
subface(z,"green")
else:
subface(z,col[k])
z=z+2
k = k + 1
turtleSet()
CreateXYZ()
CreateV()
CreateXYZ()
tle.done()