Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » Техническая помощь в реализации самописных игр |
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Search | Conference rules | Album | Register | Pilots list | Profile | Log in to check your private messages | Log in

   Page 13 of 15
Go to page: Previous  1, 2, 3 ... 12, 13, 14, 15  Next    Перейти:   All pages
Поиск в этой теме:
Канал Игры Мечты: «Техническая помощь в реализации самописных игр»
БулерМэн
 436 EGP


Рейтинг канала: 2(21)
: 68
Posts: 1580
Location: Гороховец
Joined: 07 Feb 2006
Shirson wrote:
В зачем ты рассуждаешь о темах, в которых не в зуб ногой?

Потому что в отличии от вас, Ширсон, я с питоном знаком, а вы нет.
Поэтому кто тут не в зуб ногой по моему все сказано вами же.

добавлено спустя 3 минуты:
Если честно, у меня никакого желания с вами вести беседы в таком тоне нет, поэтому давайте жить дружно Улыбка
_________________
Сосиска в хлебе

Last edited by БулерМэн on 01:14 02-03-2018; edited 2 times in total
    Posted: 01:14 02-03-2018   
Zachesa
 151 EGP


Рейтинг канала: 4(95)
: 13
Posts: 1420
Location: Хабаровск
Joined: 12 Nov 2007
Jerry Rezet wrote:
Либо я косячу, либо чего-то не понимаю (ну не питон же?!).
А что за main() в конце файла?

Code:
def main():
    list(plane)
    FillOfNoize(GPlane, GPlaneNormals, Area)


    glutInit(sys.argv)
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH)
    glutInitWindowSize(640, 480)
    glutInitWindowPosition(0, 0)
    glutCreateWindow("Hight Map-001 Noize.py")
    glutDisplayFunc(DrawGLScene)
    glutIdleFunc(DrawGLScene)
    glutReshapeFunc(ReSizeGLScene)
    glutKeyboardFunc(KeyPressed)
    glutSpecialFunc(SpecialKeyPressed)
    InitGL(400, 300)
    glutMainLoop()

main()
Вообще прокомментируй, что эта функция должна делать?

добавлено спустя 45 минут:
Что ты в результате хочешь получить? (Кстати какой питон 2.7?, 3.6?, для Linux или Windows?)

добавлено спустя 2 минуты:
Вот интересный проект https://github.com/glumpy/glumpy по теме, как я понял там набор всяких примитивов и чего-то ещё полезного.

добавлено спустя 8 минут:
Здесь что-то вроде "Привет мир!" с примером кода и подробными комментариями.
https://habrahabr.ru/post/247123/

Noise специально поменяно на Noize?
_________________
Язык Образов, для ситуационного моделирования, программирования и как язык мысли, думающей машины.

Last edited by Zachesa on 07:04 02-03-2018; edited 6 times in total
    Posted: 05:37 02-03-2018   
Minx
 1025 EGP


Модератор
Рейтинг канала: 6(332)
: 139
Posts: 10551
Location: Gomel, Belarus
Joined: 19 Nov 2005
Jerry Rezet wrote:
Minx wrote:
Оптимизация начинается с
До оптимизации там ещё три парсека на маневровых. Пока чтобы хотя бы работало приемлемо. Задница

Если у тебя не работает приемлемо по скорости, и ты пытаешься решить это, то это и есть оптимизация (по скорости).

Если ты не знаешь что тормозит, то попытки решения представляют собой танцы с бубном.
_________________
μηδείς αγεωμέτρητος εισίτω
    Posted: 09:30 02-03-2018   
БулерМэн
 436 EGP


Рейтинг канала: 2(21)
: 68
Posts: 1580
Location: Гороховец
Joined: 07 Feb 2006
Zachesa wrote:
А что за main() в конце файла?

"main()" это вызов функции, определенной заранее после "def main():"
Судя по коду внутри данной функции, которая кстати не обязана называться main, там происходит задание параметров сцены и прочие настройки. То есть по сути - вынос данного кода в отдельную функцию не обязателен. Так же возможны косяки с глобальными переменными, то есть если внутри main создается ссылка на объект, то за пределами данной функции ссылка уже будет не видна, даже если будет иметь то же самое имя.

добавлено спустя 2 минуты:
ЗЫ но в именно этом коде я не вижу создания каких-то объектов, которые могут использоваться в других местах программы. Исключение команда list создающая судя по всему массив, но при этом не изменяемая внутри функции и никакие данные туда при этом не поступают.

добавлено спустя 3 минуты:
plane = [] в начале кода ничего не делает и нигде не участвует.

добавлено спустя 5 минут:
Code:

def FillOfNoize (GPlane, GPlaneNormals, Area):
    for i in range (Area):
        for j in range (Area):
            GPlane.append(i)
            GPlane.append(j)
            GPlane.append(Perlin(i,j))

            x=i; y=j; z=Perlin(i,j)
            xn=x/math.sqrt(x*x+y*y+z*z)
            yn=y/math.sqrt(x*x+y*y+z*z)
            zn=z/math.sqrt(x*x+y*y+z*z)
           
            GPlaneNormals.append(xn)
            GPlaneNormals.append(yn)
            GPlaneNormals.append(zn)



и

Code:

    for j in range (Area-1):
        for i in range (Area-1):
            glColor4f(0.0,0.7,0.1,1)
            glArrayElement(i+j*Area)
            glArrayElement(i+j*Area+Area) #
            glArrayElement(i+j*Area+Area+1)
            glColor4f(1.0,0.7,0.1,1)
            glArrayElement(i+j*Area)
            glArrayElement(i+j*Area+1) #
            glArrayElement(i+j*Area+Area+1)


можно объединить в один цикл, если я не ошибаюсь.
_________________
Сосиска в хлебе

Last edited by БулерМэн on 16:44 02-03-2018; edited 3 times in total
    Posted: 16:44 02-03-2018   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
: 102
Posts: 1441 Заблокирован
Location: Seattle
Joined: 25 Feb 2006
>можно объединить в один цикл, если я не ошибаюсь.
зачем? это будет одинаково по скорости и страшно выглядеть в коде

количество итераций будет одинаково, то есть O(n^2) что так что так
_________________
MOV topka, C++
    Posted: 17:02 02-03-2018   
Shirson
 1605 EGP


Модератор
Рейтинг канала: 7(626)
: 219
Posts: 16511
Location: 79°W 44°N
Joined: 29 Jan 2002
БулерМэн wrote:
Потому что в отличии от вас, Ширсон, я с питоном знаком, а вы нет.

Т.е. ты хочешь сказать, что в Питоне, вложенные циклы работают медленее, чем равный им по вычислительной сложности не вложеный? Что, вот правда?
_________________
У меня бисера не доxеpа.

Last edited by Shirson on 19:35 02-03-2018; edited 1 time in total
    Posted: 19:35 02-03-2018   
БулерМэн
 436 EGP


Рейтинг канала: 2(21)
: 68
Posts: 1580
Location: Гороховец
Joined: 07 Feb 2006
Jurec wrote:
зачем? это будет одинаково по скорости и страшно выглядеть в коде

количество итераций будет одинаково, то есть O(n^2) что так что так

Shirson wrote:
вложенные циклы работают медленее, чем равный им по вычислительной сложности не вложеный?


Вы меня видимо не правильно поняли, либо я криво объяснил.


добавлено спустя 5 минут:
Примерно вот так. Мне не совсем понятно правда, зачем в первом цикле Area-1

Code:
    for j in range (Area-1):
        for i in range (Area-1):
            GPlane.append(i)
            GPlane.append(j)
            GPlane.append(Perlin(i,j))

            x=i; y=j; z=Perlin(i,j)
            xn=x/math.sqrt(x*x+y*y+z*z)
            yn=y/math.sqrt(x*x+y*y+z*z)
            zn=z/math.sqrt(x*x+y*y+z*z)
           
            GPlaneNormals.append(xn)
            GPlaneNormals.append(yn)
            GPlaneNormals.append(zn)
           
            #берем из другого цикла:

            glColor4f(0.0,0.7,0.1,1)
            glArrayElement(i+j*Area)
            glArrayElement(i+j*Area+Area) #
            glArrayElement(i+j*Area+Area+1)
            glColor4f(1.0,0.7,0.1,1)
            glArrayElement(i+j*Area)
            glArrayElement(i+j*Area+1) #
            glArrayElement(i+j*Area+Area+1)


добавлено спустя 14 минут:
Ваш код в оригинале прогоняет дважды один и тот же массив из 10*10 элементов.
В моем приведенном фрагменте - один раз.
В таком случае, при обработке на ходу - время выполнения возможно сократиться в два раза.
Пишу возможно, т.к. код не проверял. Сколько кушает процесорного времени первая часть и сколько вторая мне не известно, а то может это "стремная экономия", которой можно пренебречь. Пробуйте.
_________________
Сосиска в хлебе

Last edited by БулерМэн on 21:12 02-03-2018; edited 7 times in total
    Posted: 21:06 02-03-2018   
Shirson
 1605 EGP


Модератор
Рейтинг канала: 7(626)
: 219
Posts: 16511
Location: 79°W 44°N
Joined: 29 Jan 2002
БулерМэн wrote:

Вы меня видимо не правильно поняли, либо я криво объяснил.
Так виноваты вложенные циклы или что, что они крутят? Улыбка
Да, я нуджный и придирчивый. Но ведь истина, однако, важнее Улыбка
_________________
У меня бисера не доxеpа.
    Posted: 04:40 03-03-2018   
Sh.Tac.
 151 EGP


Рейтинг канала: 5(108)
: 14
Posts: 1426

Joined: 27 Jul 2005
Jurec wrote:
количество итераций будет одинаково, то есть O(n^2) что так что так
а чего ты не посоветовал один раз загнать всё на GPU и там менять? всяко лучше, чем гонять по шине каждый кадр Улыбка
_________________
This is what you get ...
(c) Radiohead
    Posted: 15:23 03-03-2018   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
: 102
Posts: 1441 Заблокирован
Location: Seattle
Joined: 25 Feb 2006
>В моем приведенном фрагменте - один раз.
>В таком случае, при обработке на ходу - время выполнения возможно сократиться в два раза.

а) Так ты можешь подготовить данные в одном месте один раз, а вызвать в другом - каждый кадр
б) Даже если это в одном кадре - количество операций не меняется, откуда 2 раза то?
в) Вообще говоря cache-miss'ов в цикле где ты делаешь всё, будет больше, и я ставлю что твой вариант будет медленнее из-за этого.

Sh.Tac. wrote:
а чего ты не посоветовал один раз загнать всё на GPU и там менять? всяко лучше, чем гонять по шине каждый кадр

Та я на такой уровень даже не поднимался и код не читал особо. Тут на базовых вещах проблемы.
_________________
MOV topka, C++
    Posted: 12:42 05-03-2018   
Jerry Rezet
 581 EGP


Рейтинг канала: 5(113)
: 86
Posts: 3364
Location: Санкт-Петербург.
Joined: 01 Apr 2005
Zachesa wrote:
Noise специально поменяно на Noize?
БулерМэн wrote:
plane = [] в начале кода ничего не делает и нигде не участвует.
БулерМэн wrote:
Исключение команда list создающая судя по всему массив, но при этом не изменяемая внутри функции и никакие данные туда при этом не поступают.

О! За этими кусками стоит долгая история попыток "сделать всё кузяво", которые раньше использовались, а потом выпиливались. И от них оставалось вот это, которое пока не мешает, но ничего не делает.. Это просто пример того, насколько я туп в питоне и ЯП вообще.
БулерМэн wrote:
Мне не совсем понятно правда, зачем в первом цикле Area-1

Это потому, что массив вершин имеет размер не 10*10, а 100*1, при этом вершины вызываются как будто они 10*10 в порядке 1-2-11, 1-2-10 (два треугольника), чтобы он не рисовал треугольник 9-10-19 (9 и 19 вершины рядом, а 10-я - уже на другом краю поля). Поэтому и -1 пришлось сделать. Это временный костыль, дальше просто буду с NumPy работать, с нормальными массивами. А то задолбался..

добавлено спустя 10 минут:
Если вообще не соскочу с питона в OpenGL, когда освою MinGW (что тоже пока не без трудностей - даже примеры не запускаются как надо, хотя и компилируются даже без пердуперждений).
_________________
- Вы не представляете, как вам повезло, что я здесь. Вы об этом еще пожалеете. [c]

Last edited by Jerry Rezet on 15:10 08-03-2018; edited 2 times in total
    Posted: 15:10 08-03-2018   
БулерМэн
 436 EGP


Рейтинг канала: 2(21)
: 68
Posts: 1580
Location: Гороховец
Joined: 07 Feb 2006
Jurec wrote:
а) Так ты можешь подготовить данные в одном месте один раз, а вызвать в другом - каждый кадр

"Шум Перлина", который в даннм примере нифига не шум, предполагается наверное создавать на каждом шаге заново, или я не понял задачу?
Если на каждом шаге нужен пересчет данных - то лучше, на мой взгляд, считать на ходу вместе с циклом отрисовки. Никакой разницы между отрисовкой готового массива данных и отрисовки в процессе обработки этих данных нет - геометрия в течении шага не меняется, если данные в массиве являются "слепком" некой конечной геометрии, а не отражают какой-то динамический процесс, требующий пересчета соседних ячеек массива.
Jurec wrote:
б) Даже если это в одном кадре - количество операций не меняется, откуда 2 раза то?

Как это не меняется? У тебя есть два цикла, у каждого цикла обрабатывающего одинаковое число данных в массиве есть определенное время выполнения. Если вызвать один и тот же цикл два раза подряд - на это уйдет 2*T. Другой вопрос, что это незначительное время, но для "тяжелых" операций время будет значительным.
Jurec wrote:
в) Вообще говоря cache-miss'ов в цикле где ты делаешь всё, будет больше, и я ставлю что твой вариант будет медленнее из-за этого.

Если идет речь о cache-miss в таком ключе и есть сомнения в том, что доступ к таким новосозданным данным будет замедленнен из-за разбросанности данных в ОЗУ - то у меня плохие новости - питон гораздо медленнее работает чем ламповый Си. Так что тут скорее надо заботиться не о chache-miss, а вообще о тормозах кода.

Jerry Rezet wrote:
когда освою MinGW

А разве ничего кроме MinGW не существует в нашем космическом вакууме? Улыбка
_________________
Сосиска в хлебе
    Posted: 19:18 08-03-2018   
Sh.Tac.
 151 EGP


Рейтинг канала: 5(108)
: 14
Posts: 1426

Joined: 27 Jul 2005
БулерМэн wrote:
разве ничего кроме MinGW не существует в нашем космическом вакууме?
я кста так и не смог разобраться во всём этом огороде msys2/mingw/cygwin Улыбка
но сейчас винда вроде бы поддерживает линух напрямую, по крайней мере 10-ка
Control Panel | Programs | Windows Features | Windows Subsystem for Linux

добавлено спустя 1 минуту:
ссылка
_________________
This is what you get ...
(c) Radiohead

Last edited by Sh.Tac. on 23:29 08-03-2018; edited 1 time in total
    Posted: 23:29 08-03-2018   
Jerry Rezet
 581 EGP


Рейтинг канала: 5(113)
: 86
Posts: 3364
Location: Санкт-Петербург.
Joined: 01 Apr 2005
БулерМэн wrote:
А разве ничего кроме MinGW не существует в нашем космическом вакууме?
"В нашем космическом вакууме" наобормот, существует слишком много всего. LCC, например.. Да и вообще много слишком всего - мне бы хотя бы что-нибудь чтобы освоить.. Но я - ленивая Задница опа, да. Осваивать майкрософтовские поделия чтобы пейсать чисто для винды не хочется - как-то греет душу "сама возможность писать кроссплатформенно" (что, может быть, ни разу и не реализуется, но сама мысль таки греет ЧСВ Ой, не могу!.. )
БулерМэн wrote:
"Шум Перлина", который в даннм примере нифига не шум, предполагается наверное создавать на каждом шаге заново, или я не понял задачу?
нет, предполагается допилить эту функцию до "нормального шума Перлина", а пока это просто "заглушка" с линейно сглаженным шумом по окресностям.
_________________
- Вы не представляете, как вам повезло, что я здесь. Вы об этом еще пожалеете. [c]
    Posted: 01:03 09-03-2018   
Zachesa
 151 EGP


Рейтинг канала: 4(95)
: 13
Posts: 1420
Location: Хабаровск
Joined: 12 Nov 2007
Jerry Rezet wrote:
О! За этими кусками стоит долгая история попыток "сделать всё кузяво", которые раньше использовались, а потом выпиливались. И от них оставалось вот это, которое пока не мешает, но ничего не делает.. Это просто пример того, насколько я туп в питоне и ЯП вообще.
Может не стоит оно того? Вон как БулерМэн освой ГеймМаркет, или как я посмотри Блупринты в Анриале, от них легко перейти к плюсам потом.
_________________
Язык Образов, для ситуационного моделирования, программирования и как язык мысли, думающей машины.
    Posted: 06:25 09-03-2018   
Jerry Rezet
 581 EGP


Рейтинг канала: 5(113)
: 86
Posts: 3364
Location: Санкт-Петербург.
Joined: 01 Apr 2005
Zachesa wrote:
Может не стоит оно того?
У меня не МегаПуперГиперИГРИЩЩА, а просто пробую освоить азы игростроительства. Хочу сделать "бесконечную" карту, а там посмотрим, что из этого получится. Собственно цель всех этих метаний - научиться чему-нибудь хорошему. Возможно и советуемое освою, но позже.
_________________
- Вы не представляете, как вам повезло, что я здесь. Вы об этом еще пожалеете. [c]
    Posted: 15:54 09-03-2018   
Minx
 1025 EGP


Модератор
Рейтинг канала: 6(332)
: 139
Posts: 10551
Location: Gomel, Belarus
Joined: 19 Nov 2005
Jerry Rezet wrote:
пробую освоить азы игростроительства. Хочу сделать "бесконечную" карту, а там посмотрим, что из этого получится

Только не следует путать игростроительство и картостоительство.
_________________
μηδείς αγεωμέτρητος εισίτω

Last edited by Minx on 20:05 09-03-2018; edited 1 time in total
    Posted: 19:58 09-03-2018   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
: 102
Posts: 1441 Заблокирован
Location: Seattle
Joined: 25 Feb 2006
БулерМэн wrote:
Как это не меняется? У тебя есть два цикла, у каждого цикла обрабатывающего одинаковое число данных в массиве есть определенное время выполнения. Если вызвать один и тот же цикл два раза подряд - на это уйдет 2*T. Другой вопрос, что это незначительное время, но для "тяжелых" операций время будет значительным.

Блин, я обычно таким не занимаюсь, но давай разжевывать.

А - 1 секунда
В - 2 секунды

for 1-ый (n итераций)
for 2-ой (m итераций)
операция А (1)
операция В (2)

(1+2)*m*n = 3mn

и

for 1-ый (n итераций)
for 2-ой (m итераций)
операция А (1)

это 1mn

for 1-ый (n итераций)
for 2-ой (m итераций)
операция В (2)

это 2mn

1mn + 2mn = 3mn

разницы нет в сложности алгоритма никакой.

но есть скрытая цена, я ща позже разжую и это, надо просто твою цитату тут вставить

БулерМэн wrote:
то у меня плохие новости - питон гораздо медленнее работает чем ламповый Си. Так что тут скорее надо заботиться не о chache-miss, а вообще о тормозах кода.


питон, си, брейнфак -- неважно. код выполняется на железе. у железа есть память и процессор с кешом. если ты получаешь доступ к переменной, которой нет в кеше - читается кеш линия (64 байта) из озу. что в си, что в питоне. Доступ к кешу молниеносный. К памяти - на несколько порядков больше. Вот тут добавляется скрытая стоимость, которой не видно в оценке сложности алгоритма.

Но это я захожу сильно далеко, потому что твоя позиция неверная что с точки зрения сложности алгоритма, что с точки зрения железа.
_________________
MOV topka, C++
    Posted: 22:20 09-03-2018   
БулерМэн
 436 EGP


Рейтинг канала: 2(21)
: 68
Posts: 1580
Location: Гороховец
Joined: 07 Feb 2006
Jurec wrote:
Но это я захожу сильно далеко, потому что твоя позиция неверная что с точки зрения сложности алгоритма, что с точки зрения железа.

Хорошо, ты меня хочешь убедить что я не прав. Давай проведем эксперимент, возьмем один и тот же код и выполним его на одном и том же железе? Где будет быстрее, с одним вложенным циклом, или с двумя вложенными.
Предлагаю код на Си и на Питон (чуть позже)
_________________
Сосиска в хлебе

Last edited by БулерМэн on 21:58 12-03-2018; edited 2 times in total
    Posted: 21:56 12-03-2018   
БулерМэн
 436 EGP


Рейтинг канала: 2(21)
: 68
Posts: 1580
Location: Гороховец
Joined: 07 Feb 2006
Чтобы было понятно, что я на это потратил не пять минут, приведу результаты измерений ниже.

Примеры на двух языках, выполненные максимально похоже.
Количество итераций выбрано разным для разных языков, но при этом в сопоставимом временном диапазоне выполнения.

 Раздельные циклы, Си   (кликните здесь для просмотра)

Code:

#include <time.h>
#include <stdio.h>
#include <math.h>
 
int main(void)
{
   time_t start_t, end_t;
   double diff_t;
   
  int i = 0;
  int j = 0;
 
  int x,y,z;
  float xn,yn,zn, D, D_2;
  x = 0;
  y = 0;
  z = 0;
  xn = 0;
  yn = 0;
  zn = 0;
  D = 0;
  D_2 = 0;
 
 
  time(&start_t);

  for(i=0;i<10000;i+=1)
  {
          for(j=0;j<10000;j+=1)
          {
          x=i;
         y=j;
         z=1;
         D = sqrt(x*x+y*y+z*z);
         xn= x/D;
         yn= y/D;
         zn= z/D;               
          }                               
  }
 
  for(i=0;i<10000;i+=1)
  {
          for(j=0;j<10000;j+=1)
          {
          x=i;
         y=j;
         z=1;
         D_2 = sqrt(x*x+y*y+z*z)+100*sqrt(x);
               
          }                               
  }
 
  time(&end_t);
  diff_t = difftime(end_t, start_t);
  printf("Execution time = %f\n", diff_t);


  system("pause");
  return 0;
}





 Объединенный цикл, Си   (кликните здесь для просмотра)

Code:

#include <time.h>
#include <stdio.h>
#include <math.h>
 
int main(void)
{
   time_t start_t, end_t;
   double diff_t;
   
  int i = 0;
  int j = 0;
 
  int x,y,z;
  float xn,yn,zn, D, D_2;
  x = 0;
  y = 0;
  z = 0;
  xn = 0;
  yn = 0;
  zn = 0;
  D = 0;
  D_2 = 0;
 
 
  time(&start_t);


  for(i=0;i<10000;i+=1)
  {
          for(j=0;j<10000;j+=1)
          {
          x=i;
         y=j;
         z=1;
         D = sqrt(x*x+y*y+z*z);
         xn= x/D;
         yn= y/D;
         zn= z/D;
            //переместили из второго цикла  в этот:
             x=i;
         y=j;
         z=1;
            D_2 = sqrt(x*x+y*y+z*z)+100*sqrt(x);               
          }                               
  }
 
 
  time(&end_t);
  diff_t = difftime(end_t, start_t);
  printf("Execution time = %f\n", diff_t);


  system("pause");
  return 0;
}





 Раздельные циклы, Python 2.7   (кликните здесь для просмотра)
Code:

import os
import time
import math
import sys

#print sys.version[]
#print('print to log')


start_time = time.time()


for i in range(2500):
   for j in range(2500):
         #print "...";
         x=i;
         y=j;
         z=1;
         D = math.sqrt(x*x+y*y+z*z);
         xn= x/D;
         yn= y/D;
         zn= z/D;


for i in range(2500):
   for j in range(2500):
         #print "...";
         x=i;
         y=j;
         z=1;
         D_2 = math.sqrt(x*x+y*y+z*z)+100*math.sqrt(x);




print("--- %s seconds ---" % (time.time() - start_time))

raw_input();




 Объединенный цикл, Python 2.7   (кликните здесь для просмотра)

Code:


import os
import time
import math
import sys

#print sys.version[:3]
#print('print to log')


start_time = time.time()


for i in range(2500):
   for j in range(2500):
         #print "...";
         x=i;
         y=j;
         z=1;
         D = math.sqrt(x*x+y*y+z*z);
         xn= x/D;
         yn= y/D;
         zn= z/D;
         #move code from second 'for'
         x=i;
         y=j;
         z=1;
         D_2 = math.sqrt(x*x+y*y+z*z)+100*math.sqrt(x);






print("--- %s seconds ---" % (time.time() - start_time))

raw_input();






Результаты:



Си:
Номер теста Раздельные циклы Си,сек Объединенный цикл Си,сек
13433
23333
33434
43333
53334
Python 2.7:
Номер теста Раздельные циклы Python 2.7,сек Объединенный цикл Python 2.7,сек
130.4329.5
229.9529.25
330.1729.078
429.8429.54
530.2329.71
629.9829.09
среднее:30.129.36
разница:0.74

Вывод: разница в коде на Си - отсутствует, как и говорил Jurec.
В коде на Python 2.7 разница чуть меньше секунды, из-за применения функции range() в качестве аналога 'i<=...;i+=1' в Си.
Однако, смотрим далее, время выполнения команды range() с тем же количеством "повторов" дает результат 0.15555 сек, а не 0.75
 Cкрытый текст   (кликните здесь для просмотра)

Code:

import os
import time
import math
import sys

#print sys.version[:3]
#print('print to log')


start_time = time.time()


my_list = range(6250000)

print("--- %s seconds ---" % (time.time() - start_time))

raw_input();





Следовательно в Питоне что-то тормозит еще, кроме функции range(), но это тема отдельной дискуссии.

Да, ускорение не в два раза, как я утверждал ранее.
С точки зрения оптимизации - если убрать в коде на питоне второй цикл - время сократится где-то на 0.5 сек на 1 кадр анимации при условии, что в каждом цикле будет 2500 итераций (по 2500 на X и Y)

В пересчете на матрицу из 10*10 значений - это ноль целых, ноль-ноль-ноль-ноль... секунды выигрыша в скорости.
Но на больших объектах или "текстурах" тормоза могут вылезти в падении FPS (если для питона вообще применимо это).

Еще есть вариант использовать не for, а while.

 Cкрытый текст   (кликните здесь для просмотра)

Code:

import os
import time
import math
import sys

#print sys.version[:3]
#print('print to log')


start_time = time.time()
i=0;
j=0;

while i<=2500:
   while j<=2500:
         #print "...";
         x=i;
         y=j;
         z=1;
         D = math.sqrt(x*x+y*y+z*z);
         xn= x/D;
         yn= y/D;
         zn= z/D;
         #move code from second 'for'
         x=i;
         y=j;
         z=1;
         D_2 = math.sqrt(x*x+y*y+z*z)+100*math.sqrt(x);
         j+=1;
   i+=1;
   j=0;
         






print("--- %s seconds ---" % (time.time() - start_time))

raw_input();



Но результат еще хуже, чем два отдельных "медленных" цикла for.

Все зависит от реализации механизма цикла в языке.

Для данных примеров программа на языке Си работает в 16 раз быстрее чем аналогичная на питоне.
_________________
Сосиска в хлебе

Last edited by БулерМэн on 02:29 13-03-2018; edited 8 times in total
    Posted: 01:01 13-03-2018   
Канал Игры Мечты: «Техническая помощь в реализации самописных игр»
Go to page: Previous  1, 2, 3 ... 12, 13, 14, 15  Next    Перейти:   All pages
  
Display posts from previous: 
View previous topic | View next topic |
К списку каналов | Наверх страницы
Цитата не в тему: Пока Лешик думает, что есть свобода среди звезд, несвободно вращаясь по орбите солнца... (R_Alexis)

  » Техническая помощь в реализации самописных игр |
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18