Форум программистов, компьютерный форум, киберфорум
Python: PyGame
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
1 / 1 / 1
Регистрация: 11.07.2018
Сообщений: 96

PyGame: графики рисуются "перевернутыми"

16.07.2018, 21:32. Показов 3431. Ответов 15

Студворк — интернет-сервис помощи студентам
Добрый день, написал код для построения различных графиков функции (пользователь вводит 1 график), однако график получается вверх тормашками + хотелось бы узнать, как построить ось координат и изменить масштаб при скроле колесиком (не обязательно)
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
import pygame
import math
 
def scale(x, A0, B0, A1, B1):
    return float(x-A0)/(B0-A0)*(B1-A1)+A1
 
SIZE = 760, 540
 
pygame.init()
screen = pygame.display.set_mode(SIZE)
 
print('Enter function:')
txtfunc = input()
 
print('Enter ODZ a,b:')
odz = input().split(',')
 
a = int(odz[0])
b = int(odz[1])
fmin = 100000000
fmax = -100000000
N = 50
step = (b - a) / N
pointlist = list()
x = a
while x <= b:
    if eval(txtfunc) < fmin:
        fmin = eval(txtfunc)
    if eval(txtfunc) > fmax:
        fmax = eval(txtfunc)
    x = x + step
x = a
while x <= b:
    bx = scale(x, a, b, 0, 760)
    by = scale(eval(txtfunc), fmin, fmax, 0, 540)
    pointlist.append([bx,by])
    x = x + step
print(pointlist)
pygame.draw.lines(screen, pygame.Color("tomato"), False, pointlist)
 
 
 
pygame.display.flip()
 
while True:
    ev = pygame.event.wait()
    if ev.type is pygame.QUIT:
        break
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.07.2018, 21:32
Ответы с готовыми решениями:

При импорте pygame пишет что нет модуля pygame.base
Устанавливаю для kivy.Всё есть (sython,gsstreamer,kivy,pyscripter,python) , а вот фраем. pygame не работает.Почему?Что ещё надо для работы...

Ошибка в pygame AttributeError: 'pygame.Rect' object has no attribute 'blit'
Создаю игру, крестики нолики Почему возникает ошибка и как ее исправить? AttributeError: 'pygame.Rect' object has no attribute 'blit' ...

pygame.error: cannot convert without pygame.display initialized
Только начал изучать спрайты Выдаёт ошибку: Traceback (most recent call last): File &quot;D:/project1/OCode.py&quot;, line 18, in...

15
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
16.07.2018, 22:24
Для построения графиков лучше взять Matplotlib, там все требуемые функции есть
0
1 / 1 / 1
Регистрация: 11.07.2018
Сообщений: 96
16.07.2018, 22:44  [ТС]
С Matplotlib не знаком, а с pygame'ом более-менее. Так что вот и интересуюсь, как быть в моей ситуации
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
16.07.2018, 23:42
Цитата Сообщение от W014ara Посмотреть сообщение
С Matplotlib не знаком
Посмотрите Matplotlib все-таки там просто

Чтобы перевернуть график х надо задавать как 760 - х
0
1 / 1 / 1
Регистрация: 11.07.2018
Сообщений: 96
16.07.2018, 23:55  [ТС]
bx = scale(x, a, b, 0, 760-x) так?
А каким образом построить обычную декартовую ось?
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
17.07.2018, 00:03
Python
1
bx = scale(760-x, a, b, 0, 760)
0
1 / 1 / 1
Регистрация: 11.07.2018
Сообщений: 96
17.07.2018, 10:41  [ТС]
Теперь вовсе не рисует ничего, просто черный квадрат
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
17.07.2018, 13:39
А так

Python
1
pointlist.append([760-bx, by])
0
1 / 1 / 1
Регистрация: 11.07.2018
Сообщений: 96
17.07.2018, 14:05  [ТС]
Все равно рисует к верху ногами
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
17.07.2018, 15:25
Python
1
pointlist.append([bx, 540-by])
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
17.07.2018, 15:39
Цитата Сообщение от ТабуретY Посмотреть сообщение
Для построения графиков лучше взять Matplotlib, там все требуемые функции есть
Присоединяюсь. Инструменты надо использовать по назначению. Там уже есть оси.
0
1 / 1 / 1
Регистрация: 11.07.2018
Сообщений: 96
17.07.2018, 17:35  [ТС]
pointlist.append([760-bx, by])

Работает. Теперь тогда вопрос по системе координат, как ее можно сделать?

Добавлено через 13 минут
Сделал чуть проще, но все равно не понимаю, как нарисовать оси координат/двигать график при зажатии мыши и изменять масштаб при прокручивании колесика мыши


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
import pygame
from math import *
# l"x:sin(x)"
 
def get_input():
    #return eval("lambda x: "+input())
    return eval("lambda "+input())
 
def scale(x,sec1,sec2):
    return sec2[0]+(sec2[1]-sec2[0])*(x-sec1[0])/(sec1[1]-sec1[0])
 
pygame.init()
display=pygame.display.set_mode((640,480))
fun = sin # надо вводить
 
A,B=-7,7 #надо вводить
YA,YB=-1,1 #fun(argument)
approx=150 #надо вводить
X = [A+(B-A)*i/(approx-1) for i in range(approx)]
D = [(x,fun(x)) for x in X]
graph = [(scale(x,(A,B),(0,640)),scale(y,(YA,YB),(290,0))) for x,y in D]
pygame.draw.aalines(display,(255,50,50,255),False,graph)
 
while pygame.event.wait().type !=pygame.QUIT:
         pygame.display.flip()
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
17.07.2018, 17:37
Оси можно нарисовать так, в точке 10,530 рисуем точку, затем рисуем две линии 10,530 - 10, 10 и 10, 530 - 750, 530, затем рисуем засечки с шагом 10, например, в цикле 20, 525 - 20, 535 и т.д.
0
1 / 1 / 1
Регистрация: 11.07.2018
Сообщений: 96
17.07.2018, 18:01  [ТС]
Не очень понял как это делать по вашим рассуждениям
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
17.07.2018, 18:55
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
import pygame
 
pygame.init()
 
screen_width, screen_heigth = 760, 540
screen = pygame.display.set_mode((screen_width, screen_heigth)) #окно игры
 
blue = 0, 0, 255
point1 = 10, 530
point2 = 750, 530
 
point3 = 10, 530
point4 = 10, 10
 
runtime = True
 
while runtime:
        for e in pygame.event.get():
            if e.type == pygame.QUIT or e.type == pygame.KEYDOWN and e.key == pygame.K_ESCAPE:
                    runtime = False
          
        screen.fill((0,0,0))
 
        pygame.draw.line(screen, blue, point1, point2)
        pygame.draw.line(screen, blue, point3, point4)
 
        for i in range(20,750, 10):
            pygame.draw.line(screen, blue, (i, 525), (i,535))
 
        for i in range(520,10, -10):
            pygame.draw.line(screen, blue, (5, i), (15,i))
 
        pygame.display.flip()
 
pygame.quit()
1
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
17.07.2018, 21:48
Почему ось начинается с левом верхнем углу
и связанный с этим вопросом другой пост
Как преобразовать свои координаты
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.07.2018, 21:48
Помогаю со студенческими работами здесь

Pygame ошибка module ‘pygame’ has no ‘init’ member
Всем здравствуйте. Недавно начал работать с VS code и выдает такая ошибка. Прикрепляю полностью скрин. Нашел решение перед каждой...

Не рисуются графики на Panel-e
всем привет, дорогие друзья вот программа, которая рисует несколько графиков, оси координат отображаются, но сами графики - нет, найдите...

Неверно рисуются графики
Здравствуйте! Помогите, пожалуйста, разобраться, что я делаю не так. По заданию лабараторной у меня должно быть три кнопки, по нажатию на...

Не рисуются графики поверхности в маткаде 14 portable
Ребят, всем привет. Проблема в том, что надо построить график поверхности, но маткад этого делать не желает и вместо этого пишет -...

В режиме двумерной графики рисуются не все объекты
Задали такую задачу по OpenGL: сделать окно с закладками, в одной из которых будет рисоваться график одной функции при нажатии клавиши...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru