Компьютерное моделирование 2017-2018 учебный год Лабораторная работа 7 Скрипты Lua в программе Physics Sandbox Powder
Источники
Управляющие клавиши
ЛКМ, ПКМ - левая и правая клавиши мыши. ~, тильда - открыть или закрыть терминал. Up Arrow - в терминале продублировать команду из истории команд. W - циклическое переключение режима гравитации: отключено, линейная, в центр экрана. Y - циклическое переключение режима атомсферы: вакуум, штиль, ветер. Z - экранная лупа. Z+Click - зафиксировать экранную лупу. Wheel - размер курсора. Tab - изменение формы курсора: прямоугольный, эллиптический, треугольный. Shift+ЛКМ - прямая линия. Ctrl+ЛКМ - прямоугольная область. Ctrl+ПКМ - очистка прямоугольной области. Ctrl+Click - одна частица.
Запуск скрипта
1. Сохранить скрипт в текстовом файле test1.lua 2. Открыть в программе Powder консоль, нажав клавишу "~", тильда. 3. Выполнить в консоли команду dofile("test1.lua")
Примеры команд
sim.gravityMode(num) 0 Normal, vertical gravity 1 No gravity 2 Radial gravity
Пример 1
tpt.set_console(0) for i=0, 10 do tpt.create(200+i*10,200,"VIRS") end
Пример 2
tpt.set_console(0) left = 20 top = 200 max_col = 10 max_row = 10 step1 = 10 tpt.el.oxyg.diffusion=0 for row = 0, max_col do for col = 0, max_row do tpt.create(left+col*step1,top+row*step1, "HYGN") --- tpt.create(left+col*step1+1,top+row*step1, "VIRS") tpt.create(left+col*step1+2,top+row*step1, "PLNT") tpt.create(left+col*step1+3,top+row*step1, "WATR") end end
Пример 3
tpt.set_console(0) left = 200 top = 200 tpt.el.neut.diffusion=0 tpt.create(left, top, "NEUT") tpt.set_property("vx", 50, "NEUT") tpt.set_property("vy", 0, "NEUT") tpt.create(left-5, top, "NEUT") tpt.set_property("vx", 50, "NEUT") tpt.set_property("vy", 0, "NEUT") tpt.create(left-10, top, "NEUT") tpt.set_property("vx", 50, "NEUT") tpt.set_property("vy", 0, "NEUT") tpt.create(left-15, top, "NEUT") tpt.set_property("vx", 50, "NEUT") tpt.set_property("vy", 0, "NEUT") tpt.create(left-20, top, "NEUT") tpt.set_property("vx", 50, "NEUT") tpt.set_property("vy", 0, "NEUT") tpt.create(left-25, top, "NEUT") tpt.set_property("vx", 50, "NEUT") tpt.set_property("vy", 0, "NEUT")
Пример 4
tpt.set_console(0) x = 0 t1=os.time() while (x < 300) do x = x + 1 tpt.log(x) y=100*math.sin(x/50) tpt.create(300+x,120-y,"PLNT") end
Пример 5
tpt.set_console(0) sim.gravityMode(1) x=0 function myfunc() a=sim.NUM_PARTS print(tpt.element("PLNT")) x=x+1 tpt.create(100+x,100+a,"PLNT") tpt.create(100+x,100,"NEUT") return false end t1=tonumber(os.clock()) print(t1) myfunc() ---tpt.register_step(myfunc) --tpt.unregister_step(myfunc) tpt.register_mouseclick(myfunc) --tpt.unregister_mouseclick(myfunc)
Пример 6
tpt.set_console(0) sim.gravityMode(1) widthScreen = 300 timeStep = 0.01 xScale = 10 yScale = 50 xStep = 1 yStep = 10 x0 = 80 y0 = 100 x = 0 t1=os.clock() function update() t2=os.clock() if t2 - t1 > timeStep then print(t2) t1 = t2 x = x + xStep tpt.log("x = ", x) y=yScale*math.sin(x/xScale) tpt.create(x0 + x, y0 - y, "PLNT") end if (x0 + x) > widthScreen then x = 0 y0 = y0 + yStep end return false end tpt.register_step(update) --tpt.unregister_step(myfunc) --tpt.register_mouseclick(myfunc) --tpt.unregister_mouseclick(myfunc)
Упражнения
1. Напишите скрипт на Lua для среды моделирования Powder. Скрипт должен выполнять следующие задания. В центре экрана поместите неподвижную частицу плутония. Рядом с плутонием разместите нейтрон и задайте ему скорость в направлении плутония. В отчете напишите текст скрипта и опишите результаты эксперимента. 2. Выполните задание 1, выбрав вместо плутония уран. В отчете напишите текст скрипта и опишите результаты эксперимента. 3. Напишите скрипт на Lua для среды моделирования Powder. Скрипт должен выполнять следующие задания. Разместите 20 частиц растений PLNT в горизонтальном ряду на расстоянии в 10px друг от друга. В соседней ячейке, т.е. вплотную, с каждой частицей растения разместите воду WATR. В отчете напишите текст скрипта и опишите результаты эксперимента. 4. Выполните задание 3, разместив частицы в вертикальном, ряду. Вместо воды используйте вирусы VIRS. В отчете напишите текст скрипта и опишите результаты эксперимента. 5. Выполните задание 3, разместив частицы вирусов VIRS и мыла SOAP в форме матрицы 20x20 c расстоянием 10px между соседними колонками и 20 px между соседними строками. В отчете напишите текст скрипта и опишите результаты эксперимента. 6. Выполните задание 3, подобрав на несколько веществ, которые взаимодействуют друг с другом, например соль и вода, кристаллы и соленая вода, кислород и водород, протон и электрон и т.д. 7. Напишите скрипт на Lua для среды моделирования Powder. Скрипт должен выполнять следующие задания. Измените время жизни частиц плутония. С помощью частиц постройте график зависимости количества частиц от времени. 8. Напишите скрипт на Lua для среды моделирования Powder. Скрипт должен выполнять следующие задания. Вывести плутоний в виде матрицы плотно расположенных друг к другу частиц, 100 частиц, 10 рядов по 10 частиц в каждом, 2500 частиц, 50 рядов по 50 частиц в каждом. Направить поток нейтронов на скопление частиц плутония. Выполните задание с ураном. В отчете напишите текст скрипта и опишите результаты эксперимента.