Внимание! Просьба войти или зарегистрироваться на нашем сайте, для того что бы открыть большинство статей, учебник, убрать рекламный банер и т.д.

Посмотреть все советы
Приветствую Вас Гость
Лучший русский фан сайт Алгоду
Главная » Статьи » Algodoo » Скриптинг

Скрипт для дальномера

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

Для начала следует создать основу на которую будут прикреплены лазеры с кодом.

Снимаем у темного прямоугольника все группы столкновений, чтобы он не мешал лучу лазера. А у самого  лазера свойство 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
Категория: Скриптинг | Добавил: Nait (03.05.2010) | Автор: Nait E W
Просмотров: 4352 | Комментарии: 6 | Теги: дальномер, угломер | Рейтинг: 5.0/2
Всего комментариев: 6
0  
6 ASS   (20.06.2012 17:20) [Материал]
(e)=>{scene.my.tpos=e.pos}

куда в писывать этот код ?????

0  
5 Гривус30рус   (22.07.2011 23:33) [Материал]
Как заставить работать:D
1. У белого лазера свойство maxrays поставьте равным 1
2. Перед тем как у экрана писать {""+scene.my.dist} проверте как будет отображатся текст(размер и цвет)
3. У экрана угломера вписить {"" + scene.my.tang}
Я зделал так (сам догадался) и у меня все работает, СПАСИБО pray

0  
3 AllGood   (05.06.2011 10:16) [Материал]
Это как так? wink

0  
4 Сергей0696   (05.06.2011 23:40) [Материал]
не знаю,(может написал чего не так, не помню уже) уже всё ок!

0  
2 Сергей0696   (15.05.2011 00:17) [Материал]
если честно, с дальномером у меня ничего не работает,даже текст в боксе...

0  
1 Algoman   (14.05.2010 16:28) [Материал]
это будет полезно

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]