Рубрики
Без рубрики

Треугольные симметрии с пафоном черепахи

Исследуйте треугольные симметрии для компьютерной науки GCSE и математики, используя Python и Tkinter.

Автор оригинала: Robin Andrews.

Создание связей между GCSE компьютерная наука и GCSE MATHS отличный способ Турбо- заряд Ваше обучение в обоих предметах. Есть так много областей, где одни и те же знания могут придумать в обоих. Например координаты , Переменные , Неравенство , Формулы и много других тем. Есть статья о Расчет расстояния здесь с игрой, которая показывает забавное приложение.

Здание Python Программы для изучения идей из математики – отличный способ практиковать свои навыки кодирования и углубить свои знания математики одновременно.

Это также очень удобно для обучения – как только вы получили навыки, используя графический пользовательский интерфейс, такой как Черепаха или Tkinter , вы можете довольно легко заменить игру или демонстрационную программу, чтобы помочь сделать обучение более привлекательным и эффективным.

Ниже приведена программа, которая позволяет вам исследовать симметрию равностороннего треугольника. Есть несколько частей, которые являются небольшим сложным для GCSE компьютерная наука Уровень (например, кнопки tkinter кнопки), но с небольшим количеством работ и обучения вы, вероятно, сможете принять части кода и использовать их для своих собственных программ.

Программа для изучения симметрий треугольников с помощью Python Turtle Graphics

Этот код можно найти на моем Github Отказ

import turtle
import tkinter as tk

screen = turtle.Screen()


class Label(turtle.Turtle):
    def __init__(self, coordinates=None, screen=screen):
        turtle.Turtle.__init__(self)
        if coordinates is None:
            self.coordinates = [0, 0]
        else:
            self.coordinates = coordinates
        self.text = ""
        self.color("white")
        self.coordinates = coordinates
        self.hideturtle()
        self.penup()
        self.screen = screen

    def show(self, message, alignment="center", size=18):
        self.screen.tracer(0)
        self.clear()
        self.goto(self.coordinates)
        self.write(
            message,
            font=("Helvetica", size),
            align=alignment,
        )
        self.screen.tracer(1)


def show_labels(vertices):
    global label1, label2, label3
    label1.show(vertices[0])
    label2.show(vertices[1])
    label3.show(vertices[2])


def clear_labels():
    global label1, label2, label3
    label1.clear()
    label2.clear()
    label3.clear()


def reset():
    global vertices
    vertices = ["A", "B", "C"]
    show_labels(vertices)


def rotate_clockwise():
    global vertices
    temp = vertices[-1]
    for i in range(len(vertices) - 1, 0, -1):
        vertices[i] = vertices[i - 1]
    vertices[0] = temp

    update_rotation("clockwise")


def rotate_anticlockwise():
    global vertices
    temp = vertices[0]
    for i in range(len(vertices) - 1):
        vertices[i] = vertices[i + 1]
    vertices[-1] = temp

    update_rotation("anticlockwise")


def reflect_A():
    global vertices
    b_pos = vertices.index("B")
    c_pos = vertices.index("C")
    vertices[b_pos], vertices[c_pos] = (
        vertices[c_pos],
        vertices[b_pos],
    )

    update_reflection()


def reflect_B():
    global vertices
    a_pos = vertices.index("A")
    c_pos = vertices.index("C")
    vertices[a_pos], vertices[c_pos] = (
        vertices[c_pos],
        vertices[a_pos],
    )

    update_reflection()


def reflect_C():
    global vertices
    a_pos = vertices.index("A")
    b_pos = vertices.index("B")
    vertices[a_pos], vertices[b_pos] = (
        vertices[b_pos],
        vertices[a_pos],
    )

    update_reflection()


def update_rotation(direction):
    global triangle
    clear_labels()
    if direction == "clockwise":
        triangle.right(120)
    else:
        triangle.left(120)
    show_labels(vertices)


def update_reflection():
    global triangle
    clear_labels()
    show_labels(vertices)


def make_button(canvas, text, command):
    return tk.Button(
        canvas.master,
        font=("Helvetica", 12),
        text=text,
        background="hotpink",
        foreground="white",
        bd=0,
        command=command,
    )


def create_button(canvas, x, y, text, command):
    canvas.create_window(
        x, y, window=make_button(canvas, text, command)
    )


if __name__ == "__main__":

    screen.setup(500, 600)
    screen.title("Symmetries of an Equilateral Triangle")
    screen.bgcolor("blue")
    canvas = screen.getcanvas()

    label1 = Label([-85, -55])
    label2 = Label([0, 75])
    label3 = Label([85, -55])

    triangle = turtle.Turtle("triangle")
    triangle.shapesize(120 / 20)
    triangle.color("hotpink")
    triangle.right(30)

    canvas = screen.getcanvas()

    create_button(canvas, 0, -250, "Reset", reset)
    create_button(
        canvas,
        0,
        -150,
        "Rotate 120° clockwise",
        rotate_clockwise,
    )
    create_button(
        canvas,
        0,
        -200,
        "Rotate 120° anticlockwise",
        rotate_anticlockwise,
    )
    create_button(
        canvas,
        0,
        100,
        "Reflect about perp. bisector of BC",
        reflect_A,
    )
    create_button(
        canvas,
        0,
        150,
        "Reflect about perp. bisector of AC",
        reflect_B,
    )
    create_button(
        canvas,
        0,
        200,
        "Reflect about perp. bisector of AB",
        reflect_C,
    )

    vertices = ["A", "B", "C"]
    show_labels(vertices)

    turtle.done()

Если вам нужна помощь понять код или иметь какие-либо вопросы или комментарии, пожалуйста, дайте мне знать в разделе комментариев ниже.