Studying
 Аватар для Vermont74
2 / 2 / 0
Регистрация: 13.03.2021
Сообщений: 38

Вентилятор

02.12.2022, 21:21. Показов 5608. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет ! Решал задачку на тему вентилятора, и столкнулся с такой проблемой (ниже на скрине). Прошу у вас помощи.

Вот условие:
Напишите программу, которая которая средствами Pygame создает окно 201×201 пиксель, в центре которого расположен вентилятор.

Вентилятор представляет собой круг радиусом 10 пикселей и три лопасти-треугольника. Треугольники являются равнобедренными, наименьший угол которых равен 30 градусов, а длина большей cтороны составляет 70 пикселей. Лопасти расположены под углами 120 градусов друг к другу (см. рисунок).




В момент старта программы одна из лопастей направлена вертикально вверх.

Нажатие на правую кнопку мышки увеличивает скорость вращения по часовой стрелке на 50 градусов в секунду. Нажатие на левую — уменьшает.

Скорость может стать отрицательной. В этом случае вентилятор вращается против часовой стрелки.

Реализуйте модель вентилятора.


Вот проблема:
Название: VDFKv.png
Просмотров: 340

Размер: 3.8 Кб

Вот мой код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import pygame
import math
 
 
def main():
    # инициализация Pygame:
    pygame.init()
 
    screen = pygame.display.set_mode([201, 201])
    screen.fill(pygame.Color('black'))
    clock = pygame.time.Clock()
    running = True
    fps = 70
    transform_angle = 0
 
    center_radius = 10.0
 
    a = b = 70
    angle = 0.5235987755982988  # radians of 30 degrees
    osnovanie = math.sqrt((a ** 2 + b ** 2) - (2 * a * b * math.cos(angle)))  # теорема косинусов
    # osnov_big = math.sqrt(a ** 2 - 35 ** 2)  # основание треуг-ков с углом 120
 
    # координаты вершин лопастей
    coords = [[(101, 101), (101 + osnovanie / 2, 101 - a), (101 - osnovanie / 2, 101 - a)],
              [(101, 101), (171, 121), ((101 + osnovanie / 2) + 35, 150)],
              [(101, 101), (101 - 70, 121), ((101 - osnovanie / 2) - 35, 150)]]
 
    # общий цвет для лопастей и центра
    color = pygame.Color('white')
 
    screen2 = pygame.Surface((201, 201), pygame.SRCALPHA)
    pygame.draw.circle(screen2, color, (101, 101), center_radius)
    pygame.draw.polygon(screen2, color, coords[0])
    pygame.draw.polygon(screen2, color, coords[1])  # right
    pygame.draw.polygon(screen2, color, coords[2])  # left
 
    screen.blit(screen2, (0, 0))
 
    while running:
        screen.fill(pygame.Color('black'))
 
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
 
            if event.type == pygame.MOUSEBUTTONDOWN:
                if event.button == 1:  # левая кнопка мыши
                    transform_angle -= 10
                elif event.button == 3:  # правая кнопка мыши
                    transform_angle += 10
 
        screen2 = pygame.transform.rotate(screen2, transform_angle)
        rect = screen2.get_rect()
        rect.center = (101, 101)
        screen.blit(screen2, rect)
 
        pygame.display.flip()
        clock.tick(fps)
 
    pygame.quit()
 
 
if __name__ == '__main__':
    main()
Буду очень благодарен за помощь !
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.12.2022, 21:21
Ответы с готовыми решениями:

Вентилятор
Привет! Помогите написать программу, которая которая средствами Pygame создает окно 201×201 пиксель, в центре которого расположен...

12 см вентилятор на радиатор для процессора,поддерживающий 8 см вентилятор
Всем привет,вот хочу сделать охлаждение процессора более высоким.И выбор пал на 12 сантиметровый кулер.Но как его прицепить?Радиатор имеет...

Сгорел вентилятор или бракованный вентилятор
Купил вентилятор компании Arctic модель F12 Silent 3 pin. Хотел заменить на блоке питания на данный вентилятор. Вентилятор у меня не...

3
Studying
 Аватар для Vermont74
2 / 2 / 0
Регистрация: 13.03.2021
Сообщений: 38
02.12.2022, 21:23  [ТС]
Насколько я понял, рисунок просто накладывается сам на себя, но ведь эта строка очищает общий "холст".
Цитата Сообщение от Vermont74 Посмотреть сообщение
screen.fill(pygame.Color('black'))
0
4 / 3 / 1
Регистрация: 20.06.2022
Сообщений: 9
04.01.2023, 16:21
если еще актуально: твоя проблема заключается в том, что ты вращаешь уже повернутое изображение, что создает огромную нагрузку на комп -> изображение искажается
я эту проблему решил таким образом: создаю в цикле экран screen3 (он каждый раз новый, и из-за этого искажение не появляется) и поворачиваю его каждый раз на угол rotation (rotation - дополнительная переменная перед циклом = 0, которая при каждом прохождении цикла растет/убывает, т.к. сначала мы крутим экран на 10 градусов, затем на 20, затем на 30...), после чего накладываю на screen
вот что у меня получилось:
вместо этого куска кода:
Python
1
2
3
4
    screen2 = pygame.transform.rotate(screen2, transform_angle)
    rect = screen2.get_rect()
    rect.center = (101, 101)
    screen.blit(screen2, rect)
нужно записать этот + переменная rotation в начале
Python
1
2
3
4
5
    rotation += transform_angle
    screen3 = pygame.transform.rotate(screen2, rotation)
    rect = screen3.get_rect()
    rect.center = (101, 101)
    screen.blit(screen3, rect)
1
0 / 0 / 0
Регистрация: 22.12.2024
Сообщений: 1
22.12.2024, 17:26
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import pygame
import math
 
 
def main():
    pygame.init()
 
    screen = pygame.display.set_mode([201, 201])
    screen.fill(pygame.Color('black'))
    clock = pygame.time.Clock()
    running = True
    fps = 70
    transform_angle = 0
    rotation_speed = 0
 
    center_radius = 10.0
 
    a = b = 70
    angle = math.radians(30)
    osnovanie = math.sqrt((a ** 2 + b ** 2) - (2 * a * b * math.cos(angle)))
    coords = [
        [(101, 101), (101 + osnovanie / 2, 101 - a), (101 - osnovanie / 2, 101 - a)],
        [(101, 101), (171, 121), ((101 + osnovanie / 2) + 35, 150)],
        [(101, 101), (101 - 70, 121), ((101 - osnovanie / 2) - 35, 150)]
    ]
 
    color = pygame.Color('white')
 
    screen2 = pygame.Surface((201, 201), pygame.SRCALPHA)
    pygame.draw.circle(screen2, color, (101, 101), center_radius)
    pygame.draw.polygon(screen2, color, coords[0])
    pygame.draw.polygon(screen2, color, coords[1])
    pygame.draw.polygon(screen2, color, coords[2])
 
    while running:
        screen.fill(pygame.Color('black'))
 
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
 
            if event.type == pygame.MOUSEBUTTONDOWN:
                if event.button == 1:
                    rotation_speed -= 1
                elif event.button == 3:
                    rotation_speed += 1
 
            if event.type == pygame.MOUSEBUTTONUP:
                pass
 
        transform_angle += rotation_speed
 
        rotated_surface = pygame.transform.rotate(screen2, transform_angle)
        rect = rotated_surface.get_rect(center=(101, 101))
        screen.blit(rotated_surface, rect)
 
        pygame.display.flip()
        clock.tick(fps)
 
    pygame.quit()
 
 
if __name__ == '__main__':
    main()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.12.2024, 17:26
Помогаю со студенческими работами здесь

Вентилятор БП
Всем привет. Недавно начал замечать, что во время работы блок питания резко глушится, раньше он работал довольно шумно(т.е для меня это...

Вентилятор
Доброго времени суток! Хочу купить доп. вентилятор AEROCOOL Motion 8 Plus на материнку P5KPL-AM SE там многие пишут, что мать должна...

Вентилятор
Напишите программу, которая которая средствами Pygame создает окно 201×201 пиксель, в центре которого расположен вентилятор. ...

Вентилятор ЦП
Добрый день. У меня вот такая проблема. При нагрузке процессора падают обороты вентилятора. В покое где то 1500, при нагрузке 900. Чем...

Вентилятор на процессоре
Здравствуйте. Давно мучаюсь с данной проблемой: Есть материнская плата: Intel Topsfield DP43TF Температура процессора(2-х ядерный) во...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru