Python의 거북이 라이브러리를 사용하여 별 다섯 개짜리 붉은 깃발을 그립니다.

목차

 

1. 일반 아이디어

2. 코드 표시

3. 코드 실행 효과


1. 일반 아이디어

        아래 첫 번째 그림에 표시된 대로 표준 5성 빨간색 깃발에 대한 설명을 찾으세요(출처: Baidu Encyclopedia). 아래 두 번째 그림에서 별 5개짜리 붉은 깃발 잉크 라인 다이어그램을 찾으세요.

2d9e80f82a604477a54aafa1f26ac116.png

f479ef38a46143f9be2b30da14f5c823.png

         먼저 10픽셀의 작은 정사각형을 정의하고 두 번째 사분면에 5개의 다섯개 별을 그립니다. 원점은 깃발의 중심입니다.

        별 다섯개 붉은 깃발의 왼쪽 상단 좌표는 (-150, 100)입니다. 별 다섯개 붉은 깃발을 그릴 때 거북이는 기본적으로 오른쪽을 향하고 있습니다. 300픽셀 앞으로 이동한 후 오른쪽으로 90도 회전합니다. 그런 다음 5성 빨간색 깃발의 배경이 완성될 때까지 200픽셀 앞으로 이동한 다음 빨간색으로 채웁니다. 이 색상 값은 색상 선택기를 통해 얻거나 "red" 매개변수를 사용하여 직접 얻을 수 있습니다.

        5개의 오각별을 그려보면 5개의 오각별의 공통점을 찾을 수 있는데, 4개의 작은 오각별과 큰 오각별은 크기와 방향, 좌표만 다를 뿐이다. 오성홍기 먹선 그림에 따르면 큰 오각별과 4개의 작은 오각별(위에서 아래로)의 좌표가 (-100,50), (-50)임을 알 수 있습니다. ,80), (-30,60), (-30,30), (-50,10). 큰 오각별과 작은 오각별의 외접원의 반지름은 각각 30픽셀과 10픽셀이며, 외접원의 반지름과 작은 오각별을 바탕으로 오각별의 길이를 계산할 수 있습니다. 피타고라스의 정리(5개의 획이 필요한 다섯개 별의 길이).

        그런 다음 이 5개의 오각별을 그리는 함수를 설계합니다. 비슷하기 때문에 함수를 통해 그릴 수 있습니다. 그릴 때 그리는 각도를 통일해야 합니다(오각별을 그리는 과정은 비슷합니다. 원하는 효과를 얻으려면 각도 참조를 설정해야 합니다.) 큰 다섯개 별의 방향을 기준으로 회전 각도를 0°로 설정합니다. 전달된 각도 매개변수는 상대적인 각도입니다. 큰 다섯개 별(시계 반대 방향으로 몇 도 회전했는지)에 표시됩니다. .

        작은 오각별의 회전 각도는 역삼각함수를 결합한 먹선 도표를 통해 구할 수 있는데, 다음은 예를 들어 맨 위의 작은 오각별의 방향을 나타낸 것입니다. 큰 다섯개 별( 90+arctan(3/5)*180/Π)°을 기준으로 시계 반대 방향으로 회전하는 다이어그램입니다. 아크탄젠트 함수는 라디안 값을 계산하는데, 이를 각도 값으로 변환하려면 180/Π을 곱해야 합니다. Python 수학 라이브러리에서 arctangent 함수는 math.atan()이고, Π는 math.pi로 표현됩니다.

        그런 다음 다섯개 별을 그리는 함수를 정의할 수 있으며, 다섯개 별 그리기가 끝나면 방향을 위쪽으로 조정합니다. 다음으로 큰 다섯개 별을 예로 들어 보겠습니다.

        브러시의 초기 좌표는 큰 오각별의 중심인 큰 오각별 외접원의 중심이며, 먼저 큰 오각별의 꼭대기 꼭지점으로 가야 합니다. 오성홍기의 빨간색 배경을 칠한 후 브러시 방향이 오른쪽이 되는데, 브러시 방향을 위쪽으로 조정해야 하므로 칠하기 전에 브러시를 왼쪽으로 90° 회전(90° 회전)해야 합니다. 시계 반대 방향). 그 후 브러시는 여전히 원의 중심에 있지만 방향이 변경되었습니다. 꼭지점에서 그리기 시작해야 하며 먼저 반경 거리(30픽셀)만큼 앞으로 이동하면 이제 방향과 위치가 화살표가 됩니다. 아래 그림(PS를 통해 그린)의 상단 꼭지점을 위쪽으로 향하게 합니다. 그런 다음 오른쪽으로 162°(시계 방향으로 162°) 회전해야 하며, 방향은 그림의 상단 꼭지점에 다른 화살표로 표시됩니다.

        그 후 오른쪽 하단에 있는 오른쪽 화살표에 도달하려면 다섯개 별의 길이만큼 앞으로 걸어가야 합니다. 오각별의 길이는 먹선 도표와 결합된 피타고라스의 정리를 통해 계산됩니다. 길이의 1/2은 반지름 * 8근의 1/3(오각별 길이의 1/2)입니다. 별: 외접원의 반지름 = 팔의근: 3), 2를 곱하여 다섯개 별의 길이(즉, 앞으로 나아갈 거리)를 구한 후 162° 회전(방향은 아래 그림의 오른쪽 하단 모서리에 표시된 다른 방향(대략 북서쪽))으로 5회 반복하여 아래 그림의 큰 다섯개 별의 상단 꼭지점의 위쪽이 아닌 지점에 도달합니다. 화살의.

1f83c35df4a54a4cbea2d99ce78352df.png

         다섯개 별을 그리는 기능을 재사용하려면 최종 방향을 표준 방향(즉 위쪽에서 전달된 시계 반대 방향 각도의 방향을 뺀 방향, 큰 다섯개 별이 통과하는 방향)을 가리켜야 합니다. 매개변수 0, 위쪽) 이때 방향을 162° 왼쪽으로 변경해야 합니다.

        작은 다섯개 별을 그릴 때의 차이점은 원의 중심 좌표, 외접원의 반지름, 초기 방향입니다. 주의할 점은 초기 방향을 수정한 후 그린 후 오각별의 최종 위치는 위쪽이 아니고 초기 방향 각도와 편차가 있다는 점이다. 처음에는 반대 방향으로도 회전해야 하며, 예를 들어 처음에 시계 반대 방향으로 30° 회전하고 마지막으로 시계 방향으로 30° 회전해야 방향이 기능이 실행된 후 표준 방향(위쪽, 다른 작은 다섯개 별을 그리는 데 편리함)입니다.

2. 코드 표시

import turtle
import math

turtle.pensize(3)
turtle.colormode(255)

# 画背景
turtle.pencolor("#ed120c")
turtle.fillcolor("#ed120c")
turtle.begin_fill()
turtle.penup()
turtle.goto(-150, 100)
turtle.pendown()

for i in [300, 200, 300, 200]:
    turtle.forward(i)
    turtle.right(90)
turtle.left(90)
turtle.end_fill()
turtle.penup()


# 画五角星函数,要求传入五角星中心坐标,五角星外接圆半径,五角星逆时针旋转角度(默认角度0度为向上,即大五角星方向)
def Pentagram(x, y, radius, degree):
    length = (radius * math.sqrt(8) // 3) * 2  # 根据五角星外接圆半径计算五角星长度

    turtle.goto(x, y)  # 五角星外接圆中心坐标(即五角星中心坐标)
    turtle.left(degree)  # 五角星逆时针旋转多少度
    turtle.forward(radius)  # 前进外接圆半径距离,到达五角星顶点
    turtle.pendown()

    # 以下为标准画五角星代码,画笔颜色及填充颜色可以通过取色器取
    turtle.right(162)
    turtle.pencolor("#f4ec20")
    turtle.fillcolor("#f4ec20")
    turtle.begin_fill()
    for _ in range(5):
        turtle.forward(length)
        turtle.right(144)
    turtle.end_fill()
    turtle.left(162)

    turtle.right(degree)
    turtle.penup()


# 画大五角星
Pentagram(-100, 50, 30, 0)

# 画第一个小五角星
degree1 = 90 + math.atan(3 / 5) * 180 / math.pi  # 计算第一个小五角星相对于大五角星的逆时针旋转角度,atan计算弧度需要转化为角度
Pentagram(-50, 80, 10, degree1)

# 画第二个小五角星
degree2 = 90 + math.atan(1 / 7) * 180 / math.pi
Pentagram(-30, 60, 10, degree2)

# 画第三个小五角星
degree3 = 90 - math.atan(2 / 7) * 180 / math.pi
Pentagram(-30, 30, 10, degree3)

# 画第四个小五角星
degree4 = 90 - math.atan(4 / 5) * 180 / math.pi
Pentagram(-50, 10, 10, degree4)

turtle.hideturtle()
turtle.done()

3. 코드 실행 효과

        국기가 있으면 위반으로 간주되므로 자신의 컴퓨터에서 실행하면 별 5개 붉은 깃발과 같은 효과가 나타납니다.

54d8a01e532e44299c0b6138c0a9492c.png

 

 

 

추천

출처blog.csdn.net/qq_59744114/article/details/129207568