描点画车动来显示_Python画实物图

描点画车动来显示_Python画实物图

python turtle 画实物

python描点画车动图

import math
from turtle import *

def fillblack():
    tom.pensize(0)
    tom.penup()
    tom.goto(cors[0]) 
    tom.begin_fill()
    for p in cors:
        tom.goto(p)    
    tom.end_fill()


def draw_oval(a,b=None,width=5,fill=''):
    """ 以角色为中心点画椭圆,这个方法不会根据角色的方向对椭圆进行倾斜,所以速度快.
        a:长半轴,b:短半轴,
        width:边框像素值 
        fill:填充颜色,
        outline:边框颜色        
    """
    

def draw_oval2(a,b=None,width=2,fill=''):
        """以海龟为中心点画椭圆,这个方法会根据角色的方向对椭圆进行倾斜,所以速度慢
            a:长半轴,b:短半轴,
            width:边框像素值 
            fill:填充颜色,如果为空字符串,则无颜色            
        """        
        
def two_point_distance(p1,p2):
    """返回两点之间的距离"""
    a,b = p1
    c,d = p2
    return math.sqrt((a-c)**2 + (b-d)**2)
    
def get_triangle_angle_by_length(a,b,c):
    """a:边1  b:边2 c:边3
       返回ab夹角,ac夹角,bc角度
    """
    bc=math.degrees(math.acos((a*a-b*b-c*c)/(-2*b*c)))   # bc边的夹角
    ac=math.degrees(math.acos((b*b-a*a-c*c)/(-2*a*c)))   # ac边的夹角
    ab=math.degrees(math.acos((c*c-a*a-b*b)/(-2*a*b)))   # ab边的夹角

    return ab,ac,bc         

def get_triangle_angle_by_points(p1,p2,p3):
    """根据三角形的三点得到三个角度"""
    a = two_point_distance(p1,p2)
    b = two_point_distance(p1,p3)
    c = two_point_distance(p3,p2)
    return get_triangle_angle_by_length(a,b,c)

def circle_center(p0, p1, r):
    """得到圆心点坐标"""
    pass

def draw_arc(start,end,radius):
    """两点之间画弧,radius是圆半径"""
    
drawarc = draw_arc 

def draw_arc2(start,end,radius):
    """两点之间画弧,radius是圆半径"""
    pass

drawarc2 = draw_arc2
        
def draw_line(start,end):
    """start:起点坐标,二元组,end终点坐标二元组"""
    tom.penup()
    tom.goto(start)
    tom.pendown()
    tom.goto(end)
drawline = draw_line        # 取别名

def draw_lines():
    am = len(cors)
    for i in range(am-1):
        start = tuple(cors[i])
        end = tuple(cors[i+1])
        drawline(start,end)
drawlines = draw_lines

screen = Screen()

tom = Turtle()
tom.penup()

tom.pensize(2)

# 轮廓
cors = [[-265.0, 44.0], [-250.0, 72.0], [-208.0, 85.0], [-157.0, 124.0], [-44.0, 144.0], [22.0, 143.0], [102.0, 123.0], [172.0, 57.0], [203.0, 43.0], [219.0, 42.0], [244.0, 26.0], [260.0, -2.0], [269.0, -78.0], [269.0, -94.0], [258.0, -113.0], [253.0, -115.0], [-24.0, -137.0], [-82.0, -135.0], [-88.0, -142.0], [-134.0, -144.0], [-147.0, -107.0], [-204.0, -74.0], [-209.0, -81.0], [-249.0, -83.0], [-265.0, -30.0], [-265.0, 33.0], [-264.0, 44.0]]
draw_lines()

# 挡风玻璃
cors = [[-188.0, 102.0], [-157.0, 123.0], [-139.0, 130.0], [-120.0, 129.0], [-110.0, 123.0], [-105.0, 110.0], [-108.0, 42.0], [-48.0, 40.0], [105.0, 45.0], [176.0, 55.0],[107.0, 120.0], [29.0, 120.0], [-64.0, 114.0], [-103.0, 110.0]]
draw_lines()

# 门
cors = [[-193.0, 97.0], [-156.0, 118.0], [-143.0, 123.0], [-126.0, 120.0], [-116.0, 104.0], [-118.0, 79.0], [-118.0, 56.0], [-120.0, 39.0], [-141.0, 19.0], [-148.0, -0.0], [-149.0, -29.0], [-148.0, -89.0], [-146.0, -103.0], [-204.0, -73.0], [-226.0, -61.0], [-234.0, -39.0], [-207.0, -57.0], [-206.0, -45.0], [-219.0, -34.0], [-225.0, -26.0], [-228.0, 2.0], [-231.0, 20.0], [-231.0, 47.0], [-222.0, 65.0], [-208.0, 75.0], [-198.0, 88.0], [-190.0, 97.0]]
draw_lines()

# 门2
cors = [[-168.0, 111.0], [-190.0, 68.0], [-208.0, 54.0], [-211.0, 43.0], [-213.0, 32.0], [-214.0, -4.0], [-207.0, -44.0], [-204.0, -47.0], [-197.0, -41.0], [-196.0, -29.0], [-198.0, 3.0], [-199.0, 27.0], [-178.0, 20.0], [-201.0, 29.0], [-201.0, 34.0], [-202.0, 37.0], [-206.0, 39.0], [-211.0, 39.0]]
draw_lines()


# 前进风
cors =[[-111.0, -28.0], [-77.0, -34.0], [-80.0, -24.0], [-76.0, -21.0], [52.0, -47.0], [63.0, -43.0], [160.0, -36.0], [200.0, -37.0], [205.0, -42.0], [256.0, -7.0], [260.0, -16.0], [260.0, -23.0], [256.0, -38.0], [259.0, -77.0], [251.0, -86.0], [213.0, -99.0], [224.0, -30.0], [205.0, -41.0], [207.0, -61.0], [199.0, -98.0], [196.0, -99.0], [189.0, -108.0], [109.0, -115.0], [82.0, -116.0], [76.0, -114.0], [72.0, -109.0], [54.0, -50.0]]
draw_lines()


cors =[[-77.0, -27.0], [-68.0, -53.0], [-57.0, -92.0], [-45.0, -102.0], [36.0, -109.0], [12.0, -61.0], [32.0, -61.0], [-64.0, -51.0], [-64.0, -68.0], [36.0, -77.0]]
draw_lines()

# 车盖
cors=[[-97.0, 33.0], [8.0, -26.0]]
draw_arc(tuple(cors[0]),tuple(cors[1]),300)

cors=[[197.0, 37.0], [219.0, 7.0]]
draw_arc(tuple(cors[0]),tuple(cors[1]),100)
cors=[ [219.0, 7.0], [220.0, -22.0]]
draw_arc(tuple(cors[0]),tuple(cors[1]),100)

# 右前轮
tom.penup()
tom.goto(-140.0, -78.0)
draw_oval(6,40,3)
tom.goto(-140.0, -78.0)
draw_oval(10,55,3)
tom.goto(-134.0, -78.0)
draw_oval(12,65,3)
# 前轮填充
cors=[[-139.0, -13.0], [-133.0, -9.0], [-126.0, -8.0], [-126.0, -4.0], [-123.0, -5.0], [-110.0, -28.0], [-93.0, -124.0], [-83.0, -134.0], [-89.0, -142.0], [-133.0, -144.0], [-135.0, -139.0], [-131.0, -137.0], [-124.0, -122.0], [-123.0, -112.0], [-123.0, -63.0], [-127.0, -33.0], [-132.0, -21.0], [-137.0, -15.0], [-138.0, -15.0], [-140.0, -12.0],[-139.0, -13.0]]
fillblack()

cors=[[-148.0, -9.0], [-141.0, -11.0], [-140.0, -3.0], [-135.0, 2.0], [-128.0, -0.0], [-124.0, -4.0], [-122.0, -8.0]]
tom.pensize(3)
cors=[[-149.0, -6.0], [-140.0, -15.0], [-142.0, -4.0], [-140.0, -2.0],[-138.0, 0.0],[-131.0, -2.0], [-125.0, -5.0], [-113.0, -26.0]]
draw_lines()
tom.penup()

# 右后轮
tom.goto(-254.0, -25.0)
draw_oval(7,30,3)
draw_oval(11,50,3)
tom.goto(-254.0, -20.0)
draw_oval(12,65,3)
# 后轮填充
cors=[[-202.0, -74.0], [-205.0, -73.0], [-206.0, -75.0], [-209.0, -81.0], [-211.0, -82.0], [-223.0, -82.0], [-252.0, -82.0], [-254.0, -79.0], [-252.0, -78.0], [-246.0, -75.0], [-243.0, -60.0], [-242.0, -45.0], [-242.0, -1.0], [-239.0, -5.0], [-238.0, -9.0], [-232.0, -36.0], [-223.0, -62.0], [-203.0, -73.0]]
fillblack()

# 车把手填充
cors=[[-204.0, -48.0], [-198.0, -40.0], [-197.0, -21.0], [-199.0, -13.0], [-199.0, 5.0], [-200.0, 28.0], [-213.0, 31.0], [-214.0, -5.0], [-206.0, -48.0],[-204.0, -48.0]]
fillblack()

# 前挡填充
cors=[[-31.0, -135.0], [-19.0, -128.0], [-3.0, -124.0], [79.0, -122.0], [163.0, -118.0], [209.0, -113.0], [250.0, -105.0], [252.0, -105.0], [254.0, -115.0], [223.0, -126.0], [89.0, -137.0], [-17.0, -137.0], [-27.0, -136.0]]
fillblack()

tom.goto(-189.0, 86.0)
tom.setheading(60)
draw_oval2(12,4)


tom.pensize(2)
cors=[-206.0, -55.0], [-148.0, -90.0]
drawlines()
tom.ht()

# 右反光镜
cors=[[-191.0, 68.0], [-178.0, 62.0], [-158.0, 67.0], [-148.0, 67.0], [-142.0, 48.0], [-147.0, 44.0], [-156.0, 44.0], [-174.0, 47.0], [-183.0, 49.0], [-182.0, 58.0], [-178.0, 63.0]]
drawlines()
cors=[[-121.0, 39.0], [-142.0, 48.0], [-145.0, 42.0], [-140.0, 37.0], [-148.0, 31.0], [-156.0, 43.0], [-144.0, 45.0]]
drawlines()

# 左反光镜
cors=[[168.0, 59.0], [169.0, 73.0], [173.0, 83.0], [188.0, 83.0], [198.0, 77.0], [199.0, 66.0], [183.0, 58.0], [173.0, 58.0], [172.0, 54.0], [179.0, 50.0], [182.0, 59.0]]
drawlines()
cors=[[-246.0, 26.0], [-232.0, 20.0]]
drawlines()

cors=[[60.0, -55.0], [66.0, -49.0], [193.0, -43.0], [199.0, -48.0], [200.0, -56.0], [190.0, -96.0], [183.0, -101.0], [106.0, -107.0], [88.0, -108.0], [78.0, -102.0], [61.0, -56.0], [61.0, -53.0]]
drawlines()

# 左进风
tom.pensize(6)
cors=[[222.0, -45.0], [247.0, -38.0], [259.0, -39.0], [264.0, -21.0], [259.0, -8.0], [259.0, -48.0], [223.0, -61.0], [219.0, -76.0], [245.0, -67.0], [259.0, -60.0], [259.0, -55.0], [259.0, -73.0], [266.0, -71.0], [249.0, -80.0], [218.0, -88.0], [214.0, -97.0]]
drawlines()

tom.pensize(3)
cors=[[224.0, -30.0], [221.0, -76.0], [217.0, -88.0], [215.0, -99.0]]
drawlines()

#右进风
tom.pensize(7)
cors=[[-76.0, -23.0], [-56.0, -54.0], [28.0, -58.0], [18.0, -40.0]]
drawlines()
tom.pensize(4)
cors=[[-71.0, -65.0], [5.0, -76.0], [37.0, -77.0]]
drawlines()
cors=[[-67.0, -79.0], [-24.0, -87.0], [27.0, -89.0], [46.0, -91.0]]
drawlines()
cors=[[-61.0, -93.0], [-13.0, -98.0], [30.0, -100.0], [53.0, -105.0]]
drawlines()

screen.mainloop()

所有的坐标点是通过自己编制的辅助程序手动选取的,当然不需要自己去一个一个输入。
最终的车是像下面这样的:
python turtle 画实物

本代码有偿提供,需要所有源代码及素材请联系scratch8微信。

李兴球

李兴球的博客是Python创意编程原创博客