Приветствую, дорогие читатели! В этой статье я расскажу как используя скрипты сделать прибор измеряющий расстояние до цели и некоторые другие параметры. Для начала следует создать основу на которую будут прикреплены лазеры с кодом. Снимаем у темного прямоугольника все группы столкновений, чтобы он не мешал лучу лазера. А у самого лазера свойство maxrays поставьте равным 1. Теперь начинается работа со скриптами. В консоли объявляем переменную scene.my.tpos:=[0,0] и прописываем в лазере этот код (e)=>{scene.my.tpos=e.pos} Добавляем еще один лазер как на рисунке ниже, создаем переменную scene.my.dist:=0 и пишем в новом лазере код (e)=>{scene.my.dist=((scene.my.tpos(0)-e.pos(0))^2+(scene.my.tpos(1)-e.pos(1))^2)^0.5} Если вы знакомы с геометрией, то вы вероятно, увидите в этом скрипте теорему пифагора, а если нет, то не парьтесь)) Для того чтобы убедится что все работает, добавляем прямоугольник, своеобразный экран, и в строке Text пишем следующее {""+scene.my.dist} Можете посчитать по клеточкам - расстояние действительно соответствует измеренному. ;) Для расчета угла поворота прибора создаем переменную scene.my.lang:=0 и у белого лазера добавляем к уже написанному строку ; {(math.acos(e.normal(1)) * (180 / math.pi)) < 90} ? {scene.my.lang = (math.acos(e.normal(0)) * (180 / math.pi))} : {scene.my.lang = (-(math.acos(e.normal(0)) * (180 / math.pi)))} В итоге получается (e)=>{ scene.my.dist = ((scene.my.tpos(0) - e.pos(0)) ^ 2 + (scene.my.tpos(1) - e.pos(1)) ^ 2) ^ 0.5; {(math.acos(e.normal(1)) * (180 / math.pi)) < 90} ? {scene.my.laserang = (math.acos(e.normal(0)) * (180 / math.pi))} : {scene.my.laserang = (-(math.acos(e.normal(0)) * (180 / math.pi)))} }
Делаем еще один экран и проверяем. Теперь заводим переменную для угла поворота цели scene.my.tang:=0 и к красном лазере добавляем код: {(math.acos(e.normal(0)) * (180 / math.pi)) > 90} ? {scene.my.tang = (math.acos(e.normal(1)) * (180 / math.pi))} : {scene.my.tang = (-(math.acos(e.normal(1)) * (180 / math.pi)))} получается (e)=>{ scene.my.tpos = e.pos; {(math.acos(e.normal(0)) * (180 / math.pi)) > 90} ? {scene.my.tang = (math.acos(e.normal(1)) * (180 / math.pi))} : {scene.my.tang = (-(math.acos(e.normal(1)) * (180 / math.pi)))} }
Здесь прибор измеряет угол наклона поверхности относительно луча лазера. Аналогично можно измерить и вывести на экраны и другие параметры, такие как плотность, цвет, группы столкновений и др. Вот собственно и все, есть еще способы добыть информацию об объекте, но о них я расскажу в следующей статье.
Источник: http://algophun.3dn.ru |