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

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

16.07.2018, 21:32. Показов 3372. Ответов 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
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru