О сайте
Druker (only 1 prim). User Ma…
Инструкция по и…
Руководство LSL д…
Руководство LSL д…
Руководство LSL д…

Поиск

ОБО:   . К

Обновлено: 29.06.2007

 

Руководство LSL для программистов. Часть III. Сжатие информации.

Предисловие

В первой статье цикла мы уже упоминали о том, что на объемы информации в LSL наложены ощутимые ограничения. Это касается как внутренних данных программы, так и внешних данных, хранимых в сети Интернет или в заметках (note). Ведь чтение данных извне ведется через события DataServer и http_response, которые практически могут работать не так быстро, как хотелось бы. Поэтому рассмотрим в этой статье методы сжатия первичной информации на примере координат и расстояний.

Точность представления координат

Максимальная точность координаты – 0.001 м. Для большинства приложений достаточно 0.01 м. Для физики – 0.1 м. К чему я это все веду, скажете Вы, зная, что координата задается вещественным числом float. А вот к чему. Задав базовую точность и помножив float на 10 в соответствующей степени мы из вещественного числа получим целое. Например, координата 2.45 превратится в 245, а 3.1 – в 310 при точности 0.01.

Теперь обратим внимание на координаты сима (xy): 0..256. Это 2 в степени 8. Практически, байт. Однако, по вертикали – 0..768. Короче, пусть нашим пределом будет 999 в десятеричной системе исчисления. Тогда максимальная координата сима с точностью 0.1 после умножения на 10 будет равна 9999.

Мы получили 4 цифры при точности 0.1 м.

Замена ихнего вектора на наш

В нотации LSL координата крайней верхней северо-восточной точки сима (string)v равна: <255.9,255.9,768.9>. Это 19 символов.

Запишем этот вектор в целочисленной нотации: 2559,2559,7689; – 15 символов. Уже хорошо, но не очень. Читать заметку можно и по формату (без разделителей), это будет выглядеть как 255925597689 – 12 символов.

Записывая точки в такой нотации, можно значительно "утрамбовать" информацию. Теперь ее можно хранить в текстовых строках, извлекая по мере необходимости из заметок или с интернет-сайтов.

Чтение и запись информации в Интернет

Отправка данных (или запрос) выполняется через вызов llHTTPRequest на заданный URL. Лучше всего, если это будет PHP-скрипт с набором параметров.

Чтение информации выполняется через событие http_response.

Как включить русские тексты в вывод скрипта

Известно, что помещенные в текст скрипта русские константы не отображаются. Это связано с тем, что скрипты LSL используют символы ASCII с кодами до 128. И русские в этот перечень не входят. Обойти это ограничение можно двумя способами.

Первый заключается в кодировании и декодировании данных для передачи по Интернет (без передачи). Функция llEscapeURL переводит переданный аргумент в нотацию с использованием ASCII 0..127. например, слово "Пример" в этой нотации будет выглядеть так: "%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80". Можно написать простой скрипт, слушающий фразы из чата и отображающий их в этом формате. Либо использовать обычный браузер с google.com: набранный русский текст после начала поиска можно извлечь из строки адреса

 http://www.google.c...&qВаша Фраза.

Полученные константы помещаются в скрипт, и всякий раз отображаются в чате или в панели диалога (llDialog) через вызов llUnescapeURL.

Второй способ заключается в чтении данных из Интернет. Это может быть или текстовый файл с русскими фразами в кодировке Win-1251, или PHP-скрипт, работающий с подобным файлом. В первом случае разбор текстового файла ложится на плечи LSL-скрипта, что удобно для небольших объемов. Во втором – на плечи PHP, который по заданным параметрам "отдает" какую-то определенную часть большого куска текста.

Для последнего случая можно для "пробы пера" сделать кубик, травящий анекдоты.

 
Используются технологии uCoz