Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 16, 2011 19:48:48

cheeky
От:
Зарегистрирован: 2011-09-16
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с графикой, расчеты.

Вечер добрый. Сразу приношу извинения за то если код python будет оформлен не правильно, я с телефона, не удобно.
Изучая python примерно год. Не профессионально, но разбираюсь.
Начал писать не большую графическую программу. Но столкнулся с отсутствием опыта. Много думал, тестировал, ну в общем без успешно. Что я хочу создать. К примеру пишу функцию которая выводит на экран точку, которая движется по экрану, отбиваясь от стен. С этим проблем нет. Но вот я хочу добавить еще 10 точек, которые буду двигаться и просчитываться. Но писать, создавать для каждой координаты, расчеты просто невыносимо. Можно ли написать такой движок, или функцию которая будет сама расчитывать для каждой точки, в зависимости от того какое количество точек я указал. Поэтому я не создавал глобальных переменных,не вносил их в расчет в цикл while, а хочу решить это с помощью локальных, в функции, правда не знаю как. Жду помощи..Напишу код.

import appuifw, e32
appuifw.app.body=canvas=appuifw.Canvas()
sleep=e32.ao_sleep
process=1
def exit():
global process
process=0

appuifw.app.exit_key_handler=exit

def drawpoint(x,y, color, size):
canvas.point((x, y), color, width=size)

while process:
canvas.clear()
sleep(0.1)
drawpoint(50, 50,0x, 10)
#вот как тут для этой функции, делать просчет что бы точка двигалась? И можно ли это превратить в двиг? Надеюсь поняли, жду советов.



Отредактировано (Сен. 16, 2011 20:21:17)

Офлайн

#2 Сен. 16, 2011 21:00:36

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Работа с графикой, расчеты.

Одна из возможностей - пойти по пути создания объектов

class Tpoint(object):
def __init__(self):
self.x=random()
self.y=random()
def move(self):
self.x+=1
self.y+=1
self.normalize()

pointarray=[Tpoint() for i in range(10)]

while process:
canvas.clear()
sleep(0.1)
for point in pointarray:
drawpoint(point.x, point.y, 10)



Отредактировано (Сен. 16, 2011 21:01:27)

Офлайн

#3 Сен. 17, 2011 23:01:21

cheeky
От:
Зарегистрирован: 2011-09-16
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с графикой, расчеты.

ни чего не происходит. Не смотря на то что подстроил код

import appuifw, e32,random, key_codes
appuifw.app.body=canvas=appuifw.Canvas()
process=1
sleep=e32.ao_sleep
def exit():
global process
process=0
appuifw.app.exit_key_handler=exit
appuifw.app.screen="full"
class Tpoint(object):
def __init__(self):
self.x=random.random()
self.y=random.random()
def movie(self):
self.x+=5
self.y+=5
self.normalize()
point=[Tpoint() for i in range(10)]

while process:
canvas.clear()
sleep(0.1)
for p in point:
canvas.point((p.x, p.y), 0xff, 5)



Офлайн

#4 Сен. 17, 2011 23:07:35

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Работа с графикой, расчеты.

Вы Tpoint.movie не вызываете

Офлайн

#5 Сен. 17, 2011 23:09:05

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Работа с графикой, расчеты.

а как оно у вас работает? Вы self.normalize() не определили. Я имел ввиду то что в нем вы точки будете от стен отражать.



Офлайн

#6 Сен. 17, 2011 23:45:07

cheeky
От:
Зарегистрирован: 2011-09-16
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с графикой, расчеты.

можете привести пример на моем коде? Потому что я уже запутался:(



Офлайн

#7 Сен. 18, 2011 18:54:40

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Работа с графикой, расчеты.

Ну школьная задачка же )

class Point(object):

def __init__(self, maxx, maxy, minx=0, miny=0, dx=5, dy=5):
self._x = random.randrange(minx, maxx)
self._y = random.randrange(miny, maxy)
self._dx = dx
self._dy = dy
self._rect = (minx, miny, maxx, maxy)

def normalize(self):
minx, miny, maxx, maxy = self._rect
if self._x >= maxx:
self._x = maxx - 1
self._dx = - self._dx
elif self._x <= minx:
self._x = minx + 1
self._dx = - self._dx

if self._y >= maxy:
self._y = maxy - 1
self._dy = - self._dy
elif self._y <= miny:
self._y = miny + 1
self._dy = - self._dy

def move(self):
self._x += self._dx
self._y += self._dy
self.normalize()

def coords(self):
return (self._x, self._y)

point=[Tpoint(размер_по_X, размер_по_Y) for i in range(10)]

while process:
canvas.clear()
sleep(0.1)
for p in point:
p.move()
canvas.point(p.coords(), 0xff, 5)

Офлайн

#8 Сен. 19, 2011 16:53:04

cheeky
От:
Зарегистрирован: 2011-09-16
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с графикой, расчеты.

шикарно. А что в цикл писать то?:)



Офлайн

#9 Сен. 19, 2011 17:15:23

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Работа с графикой, расчеты.

Там уже все написанно, вам только нужно подставить размер_по_X и размер_по_Y вашего экрана или окна

Офлайн

#10 Сен. 20, 2011 10:08:19

cheeky
От:
Зарегистрирован: 2011-09-16
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с графикой, расчеты.

s0rg
Там уже все написанно, вам только нужно подставить размер_по_X и размер_по_Y вашего экрана или окна
Эхей, ну спасибо. Буду разЖОвывать.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version