Найти - Пользователи
Полная версия: Работа с графикой, расчеты.
Начало » Python для новичков » Работа с графикой, расчеты.
1
cheeky
Вечер добрый. Сразу приношу извинения за то если код 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)
#вот как тут для этой функции, делать просчет что бы точка двигалась? И можно ли это превратить в двиг? Надеюсь поняли, жду советов.
doza_and
Одна из возможностей - пойти по пути создания объектов
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)
cheeky
ни чего не происходит. Не смотря на то что подстроил код
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)
s0rg
Вы Tpoint.movie не вызываете
doza_and
а как оно у вас работает? Вы self.normalize() не определили. Я имел ввиду то что в нем вы точки будете от стен отражать.
cheeky
можете привести пример на моем коде? Потому что я уже запутался:(
s0rg
Ну школьная задачка же )

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)
cheeky
шикарно. А что в цикл писать то?:)
s0rg
Там уже все написанно, вам только нужно подставить размер_по_X и размер_по_Y вашего экрана или окна
cheeky
s0rg
Там уже все написанно, вам только нужно подставить размер_по_X и размер_по_Y вашего экрана или окна
Эхей, ну спасибо. Буду разЖОвывать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB