<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://man.deeptown.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://man.deeptown.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rnd</id>
		<title>Deeptown Manual - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://man.deeptown.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rnd"/>
		<link rel="alternate" type="text/html" href="http://man.deeptown.org/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Rnd"/>
		<updated>2026-04-26T07:23:57Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.20.2</generator>

	<entry>
		<id>http://man.deeptown.org/index.php/%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8</id>
		<title>Рабочие заметки</title>
		<link rel="alternate" type="text/html" href="http://man.deeptown.org/index.php/%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8"/>
				<updated>2008-11-15T21:36:18Z</updated>
		
		<summary type="html">&lt;p&gt;Rnd: /* Перевод контента на английский язык */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Описать концепцию &amp;lt;tt&amp;gt;Proc&amp;lt;/tt&amp;gt;:&lt;br /&gt;
** Отличия от &amp;lt;tt&amp;gt;[[Closure]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Дать ссылки в книге&lt;br /&gt;
* Частичная поддержка перегрузки функций&lt;br /&gt;
* Ключевое слово &amp;lt;tt&amp;gt;'''ensure'''&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Описать конструкцию (a, b, c) = [x, y, z]&lt;br /&gt;
* Переделать все иемна исключений в основную форму ESmthError&lt;br /&gt;
* Описать механизм примесей и его идеологию&lt;br /&gt;
** Зачем нужны&lt;br /&gt;
** Чем отличаются от обычного наследования/расширения&lt;br /&gt;
** &amp;lt;tt&amp;gt;Comparable&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Enumerable&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Operable&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Добавить строки &amp;lt;tt&amp;gt;:string&amp;lt;/tt&amp;gt; и #x в схему подсветки&lt;br /&gt;
* Описать необходимость приведения типов (где надо) при работе с динамическими переменными&lt;br /&gt;
* Поля в расширениях теперь можно делать (?)&lt;br /&gt;
* Пространства имен&lt;br /&gt;
* [[Классы и объекты#Расширения]], описать возможность вызова предыдущей копии метода (когда появится возможность)&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''break'''&amp;lt;/tt&amp;gt; в блоках&lt;br /&gt;
* перечисления?&lt;br /&gt;
* &amp;lt;tt&amp;gt;MyClass.MY_CONST&amp;lt;/tt&amp;gt;&lt;br /&gt;
* абстрактные методы&lt;br /&gt;
* [[Стандартные типы данных#Потоки]]&lt;br /&gt;
&lt;br /&gt;
== Замечания по самому тексту ==&lt;br /&gt;
&lt;br /&gt;
* Коммент в разделе [[Введение, или краткий обзор#Здравствуй, мир!]]&lt;br /&gt;
* [[Классы и объекты#Смотри также]]&lt;br /&gt;
* [[Объявление переменных и констант#Смотри также]]&lt;br /&gt;
* [[Стандартные типы данных#Указатели]]&lt;br /&gt;
&lt;br /&gt;
* Предупреждение в разделе [[Функции#Перегрузка функций и операторов]]&lt;br /&gt;
&lt;br /&gt;
== TODO компилятора ==&lt;br /&gt;
&lt;br /&gt;
* Возможность объявлять класс до его реализации, аналогично forward declarations функций&lt;br /&gt;
&lt;br /&gt;
== Перевод контента на английский язык ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;kpp&amp;quot; line=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;random&amp;gt; книжку про К++ переводить?&lt;br /&gt;
&amp;lt;Raw_mat&amp;gt; переводи&lt;br /&gt;
&amp;lt;dk&amp;gt; ну там по идее поменяется много чего&lt;br /&gt;
&amp;lt;dk&amp;gt; потому что она уже малость устарела по сравнению с текущей версией языка&lt;br /&gt;
&amp;lt;dk&amp;gt; я бы лучше сказал что надо переводить все что осталось непереведенное из блогов/статей&lt;br /&gt;
&amp;lt;dk&amp;gt;  уже книжкой стал? | эмм в смысле?&lt;br /&gt;
&amp;lt;random&amp;gt; надо план перевода чтобы кто-то координировал (Рав?) именно чтобы переводить то что надо в первую очередь и чтоб оно не менялось&lt;br /&gt;
&amp;lt;dk&amp;gt; вообще по хорошему надо не только переводить. А огранизовать процесс по английской версии сайта&lt;br /&gt;
&amp;lt;dk&amp;gt; то есть м/б написать какой то материал, который был бы необходим именно там, с учетом на западную аудиторию&lt;br /&gt;
&amp;lt;Raw_mat&amp;gt; ранд, переведи интерфейс сайта на европейские  языки&lt;br /&gt;
&amp;lt;Raw_mat&amp;gt; а еще лучше на китайский или япошский&lt;br /&gt;
&amp;lt;random&amp;gt; еще надо определиться как в вики переводные статьи оформлять (шаблон названия и связь с тегом &amp;quot;язык&amp;quot;)&lt;br /&gt;
&amp;lt;random&amp;gt; могу токо на англиский пока&lt;br /&gt;
&amp;lt;Raw_mat&amp;gt; разные поддомены вики  языковые&lt;br /&gt;
&amp;lt;Raw_mat&amp;gt; какна википедии&lt;br /&gt;
&amp;lt;random&amp;gt; я к тому что в ман вики вроде нету яз разделов надо создать тогда можно будет каждому выбирать и переводить, но так чтобы не было разнобоя&lt;br /&gt;
&amp;lt;random&amp;gt; и потом корв правильно сказал надо чтоб кто-то организовывал в целом английский имидж сайта с учетом особенностей аудитории&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Main page =&lt;br /&gt;
== Informatoion ==&lt;br /&gt;
&lt;br /&gt;
* [[About this project]]&lt;br /&gt;
* [[Deeptown SDK]]&lt;br /&gt;
* [[Tasks|Current tasks]]&lt;br /&gt;
* [[Bugzilla]]&lt;br /&gt;
* [[Our Spam]]&lt;br /&gt;
* [[Release Notes]]&lt;br /&gt;
* [[Feedback]]&lt;br /&gt;
&lt;br /&gt;
== Docs ==&lt;br /&gt;
&lt;br /&gt;
* [[K++]]&lt;br /&gt;
* [[World Engine]]&lt;br /&gt;
* [[Gide Platform]]&lt;br /&gt;
* [[gide standard lib]]&lt;br /&gt;
* [[Tutorials &amp;amp; HOWTO's]]&lt;br /&gt;
* [[Building and running from source]]&lt;br /&gt;
* [[Tips &amp;amp; Tricks]]&lt;/div&gt;</summary>
		<author><name>Rnd</name></author>	</entry>

	<entry>
		<id>http://man.deeptown.org/index.php/%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8</id>
		<title>Рабочие заметки</title>
		<link rel="alternate" type="text/html" href="http://man.deeptown.org/index.php/%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8"/>
				<updated>2008-11-14T22:40:02Z</updated>
		
		<summary type="html">&lt;p&gt;Rnd: /* Перевод контента на английский язык */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Описать концепцию &amp;lt;tt&amp;gt;Proc&amp;lt;/tt&amp;gt;:&lt;br /&gt;
** Отличия от &amp;lt;tt&amp;gt;[[Closure]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Дать ссылки в книге&lt;br /&gt;
* Частичная поддержка перегрузки функций&lt;br /&gt;
* Ключевое слово &amp;lt;tt&amp;gt;'''ensure'''&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Описать конструкцию (a, b, c) = [x, y, z]&lt;br /&gt;
* Переделать все иемна исключений в основную форму ESmthError&lt;br /&gt;
* Описать механизм примесей и его идеологию&lt;br /&gt;
** Зачем нужны&lt;br /&gt;
** Чем отличаются от обычного наследования/расширения&lt;br /&gt;
** &amp;lt;tt&amp;gt;Comparable&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Enumerable&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Operable&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Добавить строки &amp;lt;tt&amp;gt;:string&amp;lt;/tt&amp;gt; и #x в схему подсветки&lt;br /&gt;
* Описать необходимость приведения типов (где надо) при работе с динамическими переменными&lt;br /&gt;
* Поля в расширениях теперь можно делать (?)&lt;br /&gt;
* Пространства имен&lt;br /&gt;
* [[Классы и объекты#Расширения]], описать возможность вызова предыдущей копии метода (когда появится возможность)&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''break'''&amp;lt;/tt&amp;gt; в блоках&lt;br /&gt;
* перечисления?&lt;br /&gt;
* &amp;lt;tt&amp;gt;MyClass.MY_CONST&amp;lt;/tt&amp;gt;&lt;br /&gt;
* абстрактные методы&lt;br /&gt;
* [[Стандартные типы данных#Потоки]]&lt;br /&gt;
&lt;br /&gt;
== Замечания по самому тексту ==&lt;br /&gt;
&lt;br /&gt;
* Коммент в разделе [[Введение, или краткий обзор#Здравствуй, мир!]]&lt;br /&gt;
* [[Классы и объекты#Смотри также]]&lt;br /&gt;
* [[Объявление переменных и констант#Смотри также]]&lt;br /&gt;
* [[Стандартные типы данных#Указатели]]&lt;br /&gt;
&lt;br /&gt;
* Предупреждение в разделе [[Функции#Перегрузка функций и операторов]]&lt;br /&gt;
&lt;br /&gt;
== TODO компилятора ==&lt;br /&gt;
&lt;br /&gt;
* Возможность объявлять класс до его реализации, аналогично forward declarations функций&lt;br /&gt;
&lt;br /&gt;
== Перевод контента на английский язык ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;kpp&amp;quot; line=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;random&amp;gt; книжку про К++ переводить?&lt;br /&gt;
&amp;lt;Raw_mat&amp;gt; переводи&lt;br /&gt;
&amp;lt;dk&amp;gt; ну там по идее поменяется много чего&lt;br /&gt;
&amp;lt;dk&amp;gt; потому что она уже малость устарела по сравнению с текущей версией языка&lt;br /&gt;
&amp;lt;dk&amp;gt; я бы лучше сказал что надо переводить все что осталось непереведенное из блогов/статей&lt;br /&gt;
&amp;lt;dk&amp;gt;  уже книжкой стал? | эмм в смысле?&lt;br /&gt;
&amp;lt;random&amp;gt; надо план перевода чтобы кто-то координировал (Рав?) именно чтобы переводить то что надо в первую очередь и чтоб оно не менялось&lt;br /&gt;
&amp;lt;dk&amp;gt; вообще по хорошему надо не только переводить. А огранизовать процесс по английской версии сайта&lt;br /&gt;
&amp;lt;dk&amp;gt; то есть м/б написать какой то материал, который был бы необходим именно там, с учетом на западную аудиторию&lt;br /&gt;
&amp;lt;Raw_mat&amp;gt; ранд, переведи интерфейс сайта на европейские  языки&lt;br /&gt;
&amp;lt;Raw_mat&amp;gt; а еще лучше на китайский или япошский&lt;br /&gt;
&amp;lt;random&amp;gt; еще надо определиться как в вики переводные статьи оформлять (шаблон названия и связь с тегом &amp;quot;язык&amp;quot;)&lt;br /&gt;
&amp;lt;random&amp;gt; могу токо на англиский пока&lt;br /&gt;
&amp;lt;Raw_mat&amp;gt; разные поддомены вики  языковые&lt;br /&gt;
&amp;lt;Raw_mat&amp;gt; какна википедии&lt;br /&gt;
&amp;lt;random&amp;gt; я к тому что в ман вики вроде нету яз разделов надо создать тогда можно будет каждому выбирать и переводить, но так чтобы не было разнобоя&lt;br /&gt;
&amp;lt;random&amp;gt; и потом корв правильно сказал надо чтоб кто-то организовывал в целом английский имидж сайта с учетом особенностей аудитории&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rnd</name></author>	</entry>

	<entry>
		<id>http://man.deeptown.org/index.php/%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8</id>
		<title>Рабочие заметки</title>
		<link rel="alternate" type="text/html" href="http://man.deeptown.org/index.php/%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8"/>
				<updated>2008-11-14T22:37:42Z</updated>
		
		<summary type="html">&lt;p&gt;Rnd: /* TODO компилятора */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Описать концепцию &amp;lt;tt&amp;gt;Proc&amp;lt;/tt&amp;gt;:&lt;br /&gt;
** Отличия от &amp;lt;tt&amp;gt;[[Closure]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Дать ссылки в книге&lt;br /&gt;
* Частичная поддержка перегрузки функций&lt;br /&gt;
* Ключевое слово &amp;lt;tt&amp;gt;'''ensure'''&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Описать конструкцию (a, b, c) = [x, y, z]&lt;br /&gt;
* Переделать все иемна исключений в основную форму ESmthError&lt;br /&gt;
* Описать механизм примесей и его идеологию&lt;br /&gt;
** Зачем нужны&lt;br /&gt;
** Чем отличаются от обычного наследования/расширения&lt;br /&gt;
** &amp;lt;tt&amp;gt;Comparable&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Enumerable&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Operable&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Добавить строки &amp;lt;tt&amp;gt;:string&amp;lt;/tt&amp;gt; и #x в схему подсветки&lt;br /&gt;
* Описать необходимость приведения типов (где надо) при работе с динамическими переменными&lt;br /&gt;
* Поля в расширениях теперь можно делать (?)&lt;br /&gt;
* Пространства имен&lt;br /&gt;
* [[Классы и объекты#Расширения]], описать возможность вызова предыдущей копии метода (когда появится возможность)&lt;br /&gt;
* &amp;lt;tt&amp;gt;'''break'''&amp;lt;/tt&amp;gt; в блоках&lt;br /&gt;
* перечисления?&lt;br /&gt;
* &amp;lt;tt&amp;gt;MyClass.MY_CONST&amp;lt;/tt&amp;gt;&lt;br /&gt;
* абстрактные методы&lt;br /&gt;
* [[Стандартные типы данных#Потоки]]&lt;br /&gt;
&lt;br /&gt;
== Замечания по самому тексту ==&lt;br /&gt;
&lt;br /&gt;
* Коммент в разделе [[Введение, или краткий обзор#Здравствуй, мир!]]&lt;br /&gt;
* [[Классы и объекты#Смотри также]]&lt;br /&gt;
* [[Объявление переменных и констант#Смотри также]]&lt;br /&gt;
* [[Стандартные типы данных#Указатели]]&lt;br /&gt;
&lt;br /&gt;
* Предупреждение в разделе [[Функции#Перегрузка функций и операторов]]&lt;br /&gt;
&lt;br /&gt;
== TODO компилятора ==&lt;br /&gt;
&lt;br /&gt;
* Возможность объявлять класс до его реализации, аналогично forward declarations функций&lt;br /&gt;
&lt;br /&gt;
== Перевод контента на английский язык ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;random&amp;gt; книжку про К++ переводить?&lt;br /&gt;
&amp;lt;Raw_mat&amp;gt; переводи&lt;br /&gt;
&amp;lt;dk&amp;gt; ну там по идее поменяется много чего&lt;br /&gt;
&amp;lt;dk&amp;gt; потому что она уже малость устарела по сравнению с текущей версией языка&lt;br /&gt;
&amp;lt;dk&amp;gt; я бы лучше сказал что надо переводить все что осталось непереведенное из блогов/статей&lt;br /&gt;
&amp;lt;dk&amp;gt;  уже книжкой стал? | эмм в смысле?&lt;br /&gt;
&amp;lt;random&amp;gt; надо план перевода чтобы кто-то координировал (Рав?) именно чтобы переводить то что надо в первую очередь и чтоб оно не менялось&lt;br /&gt;
&amp;lt;dk&amp;gt; вообще по хорошему надо не только переводить. А огранизовать процесс по английской версии сайта&lt;br /&gt;
&amp;lt;dk&amp;gt; то есть м/б написать какой то материал, который был бы необходим именно там, с учетом на западную аудиторию&lt;br /&gt;
&amp;lt;Raw_mat&amp;gt; ранд, переведи интерфейс сайта на европейские  языки&lt;br /&gt;
&amp;lt;Raw_mat&amp;gt; а еще лучше на китайский или япошский&lt;br /&gt;
&amp;lt;random&amp;gt; еще надо определиться как в вики переводные статьи оформлять (шаблон названия и связь с тегом &amp;quot;язык&amp;quot;)&lt;br /&gt;
&amp;lt;random&amp;gt; могу токо на англиский пока&lt;br /&gt;
&amp;lt;Raw_mat&amp;gt; разные поддомены вики  языковые&lt;br /&gt;
&amp;lt;Raw_mat&amp;gt; какна википедии&lt;br /&gt;
&amp;lt;random&amp;gt; я к тому что в ман вики вроде нету яз разделов надо создать тогда можно будет каждому выбирать и переводить, но так чтобы не было разнобоя&lt;br /&gt;
&amp;lt;random&amp;gt; и потом корв правильно сказал надо чтоб кто-то организовывал в целом английский имидж сайта с учетом особенностей аудитории&lt;/div&gt;</summary>
		<author><name>Rnd</name></author>	</entry>

	<entry>
		<id>http://man.deeptown.org/index.php/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8</id>
		<title>Алгоритм синхронизации</title>
		<link rel="alternate" type="text/html" href="http://man.deeptown.org/index.php/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8"/>
				<updated>2008-10-24T19:04:41Z</updated>
		
		<summary type="html">&lt;p&gt;Rnd: /* Оценка параметров */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Здесь будет рассмотрена математическая составляющая алгоритмов синхронизации физики. Понимающих в этом деле, просьба прокомментировать.&lt;br /&gt;
&lt;br /&gt;
== Построение сплайна ==&lt;br /&gt;
&lt;br /&gt;
Для синхронизации была выбрана форма кубических сплайнов, при которой за основу берутся значения функции и ее производной в двух точках. &lt;br /&gt;
&lt;br /&gt;
Свойства сплайна:&lt;br /&gt;
:&amp;lt;math&amp;gt;s(t_i) = f(t_i), \quad s'(t_i) = f'(t_i)\!&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Уравнения сплайна:&lt;br /&gt;
:&amp;lt;math&amp;gt;s(t) = a + bt + ct^2 + dt^3\!&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;s'(t) = b + 2ct + 3dt^2\!&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для нахождения коэффициентов &amp;lt;math&amp;gt;a, b, c, d&amp;lt;/math&amp;gt; записываем систему уравнений:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{cases}&lt;br /&gt;
a + bt_0 + ct_0^2 + dt_0^3 = f(t_0) \\&lt;br /&gt;
a + bt_1 + ct_1^2 + dt_1^3 = f(t_1) \\&lt;br /&gt;
b + 2ct_0 + 3dt_0^2 = f'(t_0) \\&lt;br /&gt;
b + 2ct_1 + 3dt_1^2 = f'(t_1)&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Подставляем известные значения в правой части системы (даны по условию):&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{cases}&lt;br /&gt;
a + bt_0 + ct_0^2 + dt_0^3 = x_0 \\&lt;br /&gt;
a + bt_1 + ct_1^2 + dt_1^3 = x_1 \\&lt;br /&gt;
b + 2ct_0 + 3dt_0^2 = v_0 \\&lt;br /&gt;
b + 2ct_1 + 3dt_1^2 = v_1&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Поскольку сплайн не зависит от конкретных значений &amp;lt;math&amp;gt;t_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;t_1&amp;lt;/math&amp;gt;, положим &amp;lt;math&amp;gt;t_0 = 0&amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt;t_1 = t&amp;lt;/math&amp;gt;. В результате, пара уравнений становится тривиальной:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{cases}&lt;br /&gt;
a = x_0 \\&lt;br /&gt;
a + bt + ct^2 + dt^3 = x_1 \\&lt;br /&gt;
b = v_0 \\&lt;br /&gt;
b + 2ct + 3dt^2 = v_1&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Заменяем в оставшихся уравнениях известные теперь коэффициенты и получаем конечную систему:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{cases}&lt;br /&gt;
x_0 + v_0t + ct^2 + dt^3 = x_1 \\&lt;br /&gt;
v_0 + 2ct + 3dt^2 = v_1&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После нехитрых манипуляций, получаем выражения для оставшихся коэффициентов:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{cases}&lt;br /&gt;
c = \frac{3x_1 - 3x_0 - 2v_0t - v_1t}{t^2} \\&lt;br /&gt;
d = \frac{v_1t - 2x_1 + 2x_0 + v_ot}{t^3}&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ниже представлены графики оригинальной функции с наложенным на них графиком сплайна, построенного по точкам. Парабола и экспонента построены по фиксированному набору точек (-2.5, -2, -0.5, 0.5, 2, 2.5). Синусоида построена по точкам с интервалом 0.05.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Изображение:Exp.gif|Экспонента&lt;br /&gt;
Изображение:Parabola2.gif|Парабола&lt;br /&gt;
Изображение:Sin.gif|Синус&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Механизм коррекции ошибки ==&lt;br /&gt;
&lt;br /&gt;
На клиенте Диптауна работает физический движок — точно такой же, как и на сервере. Он хранит в памяти собственную копию мира (в пределах некотрого радиуса видимости), и, по приходящим от сервера данным, старается делать его наиболее похожим на мир, который находится на сервере.&lt;br /&gt;
&lt;br /&gt;
В идеальном случае, при нулевой задержке времени между клиентом и сервером, а также при достаточно большой частоте обновлений, рассинхронизация между миром клиента и миром сервера была бы пренебрежимо мала. Однако, суровая реальность говорит обратное. В результате, клиентская часть, по сути, находится в прошлом от серверной (на время половины пинга). Поэтому, возникает необходимость подгонять траекторию движения клиентских тел так, чтобы она коррелировала с эталонной, серверной траекторией, опорные точки которой клиент получает по сети.&lt;br /&gt;
&lt;br /&gt;
Коррекция осуществляется путем приложения сторонней силы к движущемуся телу так, чтобы &amp;quot;подтолкнуть&amp;quot; его в сторону желаемой траектории. Это делается в отношении координаты тела и в отношении вектора его скорости. Опять же, в идеальном случае, скорректированная траектория полностью накладывается на серверную, вплоть до равенства параметров в соответствующих точках. Необходимо найти такую корректирующую силу, которая бы наиболее быстро и незаметно сблизила реальную траекторию движения с идеальной. Задача сводится к нахождению уравнения движения, а также определению граничных параметров, которые позволят выполнить коррекцию гладко, без перерегулирования. &lt;br /&gt;
&lt;br /&gt;
=== Поиск уравнения коррекции ===&lt;br /&gt;
&lt;br /&gt;
Рассмотрим некоторый объект. В клиентской копии мира, он находится в некоторой точке и движется по некоторой траектории. Одновременно с этим, с сервера поступают данные о том, по какой траектории он движется на сервере. По этим данным клиент строит сплайн, описанный в предыдущем разделе, и получает траекторию, по которой данный объект должен двигаться на самом деле. Таким образом, в каждый момент времени нам известны вектор положения и вектор скорости объекта, а также вектор положения и вектор скорости, с которыми он должен двигаться в этот момент по данным сервера.&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы стабилизировать траекторию объекта, мы должны приложить к нему две силы — для коррекции положения и для коррекции скорости. Сумма двух этих сил скорректирует траекторию объекта некоторым образом. Если она будет слишком маленькой — мы не добъемся необходимого эффекта; если слишком большой — объект &amp;quot;перелетит&amp;quot; нужную нам траекторию, и начнет колебаться вокруг нее под действием этой силы — такое поведение, конечно, недопустимо. Для того, чтобы подобрать оптимальную силу, мы запишем уравнение движения объекта под ее действием и, проанализировав параметры, подберем оптимальные значения для регулирующих коэффициентов.&lt;br /&gt;
&lt;br /&gt;
Сила коррекции координаты должна быть направлена по разности векторов положений объектов, и пропорциональна этой разности. Также она должна быть пропорциональна массе объекта — чтобы и тяжелые, и легкие объекты вели себя одинаково. Кроме того, подумав, мы решили что эта сила должна быть пропорциональна модулю скорости объекта — для того, чтобы при малых скоростях ее действие не было бы слишком заметным для глаз пользователя (впрочем, с этим множителем не все так просто — см. ниже). Осталось домножить все это на некоторый коэффициент пропорциональности — именно его мы и будем анализировать.&lt;br /&gt;
&lt;br /&gt;
Сила коррекции скорости, аналогично, направлена по разности векторов скорости, пропорциональна этой разности; пропорциональна массе тела и некоторому второму коэффициенту.&lt;br /&gt;
&lt;br /&gt;
Осталось убедиться, что сумма этих сил действительно стабилизирует траекторию движения объекта, не приведет к колебаниям, и найти оптимальные значения для коэффициентов двух сил.&lt;br /&gt;
&lt;br /&gt;
Чтобы упростить себе жизнь, рассмотрим двумерный случай. Пусть серверная траектория тела совпадает с осью X; клиентская траектория — параллельна этой оси и находится от нее на расстоянии, равном H. В нулевой момент времени тело находится в нуле по оси X как на клиентской, так и на серверной траекториях.&lt;br /&gt;
&lt;br /&gt;
Пусть и серверная, и клиентская точки имеют горизонтальную скорость &amp;lt;math&amp;gt;V_x&amp;lt;/math&amp;gt;, а по вертикальной оси они неподвижны. Никаких прочих сил на объект не действует. Поскольку никаких сил по горизонтали не действует, мы будем рассматривать только движение по оси y.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сила коррекции высоты, по такой модели, будет направлена &amp;quot;вниз&amp;quot; на эту точку и будет равна: &lt;br /&gt;
:&amp;lt;math&amp;gt;F_p = - K_p \cdot y(t) \cdot V_x \cdot m&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; — это высота точки и &lt;br /&gt;
:&amp;lt;math&amp;gt;y(0) = H\!&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Множитель &amp;lt;math&amp;gt;V_x&amp;lt;/math&amp;gt; мы добавляем специально, чтобы уменьшить влияние силы коррекции на малых скоростях (иначе еле движущееся тело будет менять свое положение заметными глазу рывками).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сила коррекции вертикальной скорости точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;F_v = - K_v \cdot V_y(t) \cdot m&amp;lt;/math&amp;gt;&lt;br /&gt;
и &lt;br /&gt;
:&amp;lt;math&amp;gt;V_y(0) = 0\!&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Известно, что скорость — это производная координаты по времени:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_y(t) = \frac{\partial y(t)}{\partial t}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Соответственно, сила, которая действует на объект:&lt;br /&gt;
:&amp;lt;math&amp;gt;F(t) = m \cdot y''(t) = F_p + F_v = - K_p \cdot y(t) \cdot V_x \cdot m - K_v \cdot V_y(t) \cdot m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;F - F_p - F_v = 0\!&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделив на массу, и записав уравнение в дифференциальной форме, получим:&lt;br /&gt;
:&amp;lt;math&amp;gt;y''(t) + K_v \cdot y'(t) + K_p \cdot y(t) \cdot Vx = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Перепишем параметрически:&lt;br /&gt;
:&amp;lt;math&amp;gt;y''(t) + A \cdot y'(t) + B \cdot y(t) = 0\!&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Характеристическое уравнение:&lt;br /&gt;
:&amp;lt;math&amp;gt;\lambda^2 + A \cdot \lambda + B = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дискриминант характеристического уравнения:&lt;br /&gt;
:&amp;lt;math&amp;gt;D = A^2 - 4 \cdot B = K_v^2 - 4 \cdot K_p \cdot V_x&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для исключения колебательного процесса, необходимо условие &amp;lt;math&amp;gt;D \geqslant 0&amp;lt;/math&amp;gt;. Следовательно:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_v^2 - 4 \cdot K_p \cdot V_x \geqslant 0&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;K_v^2 \geqslant 4 \cdot K_p \cdot V_x, \quad V_x \leqslant \frac{K_v^2}{4 \cdot K_p}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Видно, что если &amp;lt;math&amp;gt;V_x&amp;lt;/math&amp;gt; будет больше чем эта дробь, то возникнут колебания (нарушается условие &amp;lt;math&amp;gt;D \geqslant 0&amp;lt;/math&amp;gt;). Поэтому, при малых скоростях используется само значение &amp;lt;math&amp;gt;V_x&amp;lt;/math&amp;gt;, а когда &amp;lt;math&amp;gt;V_x&amp;lt;/math&amp;gt; численно становится больше этой дроби, следует заменять ее на эту дробь (ограничение сверху).&lt;br /&gt;
&lt;br /&gt;
В конечном счете, коэффициенты &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; выражаются как&lt;br /&gt;
:&amp;lt;math&amp;gt;\alpha_{1,2} = \frac{-K_v \pm \sqrt{D}}{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее, найдем коэффициенты &amp;lt;math&amp;gt;C_1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_2&amp;lt;/math&amp;gt;: &lt;br /&gt;
:&amp;lt;math&amp;gt;y(t) = C_1 \cdot e^{\alpha_1 t} + C_2 \cdot e^{\alpha_2 t}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Зная начальные условия  &amp;lt;math&amp;gt;y(0) = H&amp;lt;/math&amp;gt; (начальное расстояние между объектами) и &amp;lt;math&amp;gt;y'(t) = 0&amp;lt;/math&amp;gt; получаем уравнение:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;C_1 \cdot e^{\alpha_1 \cdot 0} + C_2 \cdot e^{\alpha_2 \cdot 0} = y(0) = H&amp;lt;/math&amp;gt; &lt;br /&gt;
следовательно &lt;br /&gt;
:&amp;lt;math&amp;gt;C_1 + C_2 = H\!&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Из второго условия:&lt;br /&gt;
:&amp;lt;math&amp;gt;\alpha_1 \cdot C_1 \cdot e^{\alpha_1 \cdot 0} + \alpha_2 \cdot C_2 \cdot e^{\alpha_2 \cdot 0} = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\alpha_1 \cdot C_1 + \alpha_2 \cdot C_2 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Получаем систему следующих уравнений:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{cases}&lt;br /&gt;
C_1 + C_2 = H \\&lt;br /&gt;
\alpha_1 \cdot C_1 + \alpha_2 \cdot C_2 = 0&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Решая систему относительно &amp;lt;math&amp;gt;C_1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_2&amp;lt;/math&amp;gt;, получаем&lt;br /&gt;
:&amp;lt;math&amp;gt;C_{1,2} = \left ( \frac{1}{2} \pm \frac{K_v}{\sqrt{D}} \right ) \cdot H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все коэффициенты найдены, задачу можно считать решенной. Однако, есть еще один немаловаждый момент.&lt;br /&gt;
&lt;br /&gt;
=== Оценка параметров ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выше уже было упомянуто, что колебательный процесс для нас недопустим. Скажем, в случае летящей стрелы, это могло выглядеть как ее периодические колебания вдоль траектории движения, что плохо скажется на реалистичности.&lt;br /&gt;
&lt;br /&gt;
Математически, коэффициенты были рассчитаны так, чтобы этого избежать. Проблема заключается в том, что в случае клиента, мы имеем дело не с непрерывными математическими функциями, а с дискретной апроксимацией. Плюс к этому, изменение модуля прилагаемой силы осуществляется не непрерывно, а, естественно, тоже дискретно. Поскольку в моменты времени &amp;quot;между&amp;quot; коррекциями тело предоставлено само себе, оно и будет двигаться в указанную ему сторону. В худшем случае, при больших и плохо подобранных параметрах, уже после первого корректирующего воздействия, тело вылетит &amp;quot;за траекторию&amp;quot;, соответственно возникнут колебания (возможно даже возрастающие).&lt;br /&gt;
&lt;br /&gt;
Для избежания этого неприятного момента, попробуем оценить параметры и найти их &amp;quot;практический потолок&amp;quot;, с тем, чтобы не позволять пользователю задавать значения выходящие за границы.&lt;br /&gt;
&lt;br /&gt;
Итак, при моделировании, будем считать что в течение шага тело движется по прямой. Соответственно, сила, которая будет действовать на тело в течение первого шага, т.е. времени &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, будет равна &lt;br /&gt;
:&amp;lt;math&amp;gt;F_p = - K_p \cdot V_x \cdot H \cdot m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Соответственно, в течение первого шага тело будет двигаться с ускорением &lt;br /&gt;
:&amp;lt;math&amp;gt;a = - K_p \cdot Vx \cdot H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Условие стабилизации — расстояние, которое преодолеет тело за первый шаг должно быть меньше &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_p \cdot V_x \cdot H \cdot \frac{T^2}{2} &amp;lt; H, \quad K_p \cdot V_x \cdot T^2 &amp;lt; 2, \quad K_p &amp;lt; \frac{2}{V_x \cdot {T^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Левая часть неравенства будет минимальной в случае, когда &amp;lt;math&amp;gt;V_x&amp;lt;/math&amp;gt; максимальна, т.е. равна &amp;lt;math&amp;gt;\tfrac{K_v^2}{4 \cdot K_p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Это означает, что в том случае когда модуль скорости тела меньше чем указанное значение, то коррекция будет происходить гладко; когда больше — в формуле для силы стабилизации положения &amp;lt;math&amp;gt;V_x&amp;lt;/math&amp;gt; заменяется на &amp;lt;math&amp;gt;\tfrac{K_v^2}{4 \cdot K_p}&amp;lt;/math&amp;gt;. Объяснение было дано выше, при оценке дискриминанта характеристического уравнения.&lt;br /&gt;
&lt;br /&gt;
Из этого следует, что чтобы действительно сделать невидимым действие нашей силы на малых скоростях, необходимо, чтобы значение &amp;lt;math&amp;gt;\tfrac{K_v^2}{4 \cdot K_p}&amp;lt;/math&amp;gt; было бы достаточно большим. Мы взяли его по-умолчанию равным 10, но это значение можно бдет менять в свойствах каждого конкретного объекта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Осталось только численно оценить коэффициенты &amp;lt;math&amp;gt;K_p&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;K_v&amp;lt;/math&amp;gt;. Для &amp;lt;math&amp;gt;K_p&amp;lt;/math&amp;gt; конкретное значение получается, если подставить в условие &lt;br /&gt;
:&amp;lt;math&amp;gt;K_p &amp;lt; \frac{2}{V_x \cdot T^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
значения &amp;lt;math&amp;gt;V_x = 10&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T = 0.04&amp;lt;/math&amp;gt;. Получается, что &amp;lt;math&amp;gt;K_p &amp;lt; 125&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;K_v&amp;lt;/math&amp;gt; вместо &amp;lt;math&amp;gt;V_x&amp;lt;/math&amp;gt; необходимо подставить наибольшее возможное для нее значение &amp;lt;math&amp;gt;\tfrac{K_v^2}{4 \cdot K_p}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;K_p &amp;lt; \frac{2}{\frac{K_v^2}{4 \cdot K_p} \cdot T^2}, \quad K_p &amp;lt; \frac{2 \cdot 4 \cdot K_p}{K_v^2 \cdot T^2}, \quad 1 &amp;lt; \frac{8}{K_v^2 \cdot T^2}, \quad K_v^2 &amp;lt; \frac{8}{T^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Окончательно,&lt;br /&gt;
:&amp;lt;math&amp;gt;K_v &amp;lt; \frac{2\sqrt{2}}{T}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При подстановке значения &amp;lt;math&amp;gt;T = 0.04&amp;lt;/math&amp;gt;, получается, что &amp;lt;math&amp;gt;K_v &amp;lt; 70&amp;lt;/math&amp;gt;. В реальных условиях эти пределы взяты еще меньше, для защиты от граничных случаев. Конкретно, &amp;lt;math&amp;gt;K_p&amp;lt;/math&amp;gt; по-умолчанию не может превышать 50, а &amp;lt;math&amp;gt;K_v&amp;lt;/math&amp;gt; — 30&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[20:40:39] &amp;lt;droot@deeptown.org&amp;gt; так&lt;br /&gt;
[20:40:44] &amp;lt;droot@deeptown.org&amp;gt; а теперь - самое веселое&lt;br /&gt;
[20:40:51] &amp;lt;droot@deeptown.org&amp;gt; все то же самое, но только для вращения =)&lt;br /&gt;
[20:46:32] &amp;lt;korvin&amp;gt; мде..&lt;br /&gt;
[20:46:56] &amp;lt;droot@deeptown.org&amp;gt; там почти то же самое&lt;br /&gt;
[20:47:00] &amp;lt;korvin&amp;gt; ну вообще там не должно быть сильно сложно&lt;br /&gt;
[20:47:02] &amp;lt;korvin&amp;gt; то же самое по сути&lt;br /&gt;
[20:47:09] &amp;lt;droot@deeptown.org&amp;gt; т.е. плоская задача там будет точно такой же&lt;br /&gt;
[20:47:24] &amp;lt;droot@deeptown.org&amp;gt; только не y(t), а fi(t) - угол от времени&lt;br /&gt;
[20:48:03] &amp;lt;droot@deeptown.org&amp;gt; я вот не могу сообразить, что будет являться трехмерным представлением этого угла&lt;br /&gt;
[20:48:37] &amp;lt;korvin&amp;gt; в смысле?&lt;br /&gt;
[20:49:14] &amp;lt;droot@deeptown.org&amp;gt; ну вот в случае движения, от нашей задачи можно легко перейти к трехмерной, просто взяв не y(t), а r(t) - вектор координаты&lt;br /&gt;
[20:49:18] &amp;lt;droot@deeptown.org&amp;gt; мм..&lt;br /&gt;
[20:49:23] &amp;lt;droot@deeptown.org&amp;gt; ну точнее не совсем так&lt;br /&gt;
[20:49:27] &amp;lt;droot@deeptown.org&amp;gt; там же надо разность брать&lt;br /&gt;
[20:49:32] &amp;lt;droot@deeptown.org&amp;gt; а, ну да&lt;br /&gt;
[20:49:44] &amp;lt;droot@deeptown.org&amp;gt; т.е. вместо y(t) мы пишем разность векторов между сервером и клиентом&lt;br /&gt;
[20:49:45] &amp;lt;korvin&amp;gt; ну там вроде же просто 3 угла, которые можно точно так же линейно интерполировать&lt;br /&gt;
[20:50:45] &amp;lt;droot@deeptown.org&amp;gt; Vx - это модуль серверной скорости&lt;br /&gt;
[20:50:58] &amp;lt;droot@deeptown.org&amp;gt; ну а все остальное понятно&lt;br /&gt;
[20:51:29] &amp;lt;droot@deeptown.org&amp;gt; что же касается углов&lt;br /&gt;
[20:51:41] &amp;lt;droot@deeptown.org&amp;gt; ну если посмотреть на задачу с практической точки зрения&lt;br /&gt;
[20:51:50] &amp;lt;droot@deeptown.org&amp;gt; т.е. у нас есть два кватерниона&lt;br /&gt;
[20:53:24] &amp;lt;droot@deeptown.org&amp;gt; надо сообразить, что будет являться кватернионом вращения из одного положения во второе&lt;br /&gt;
[20:53:50] &amp;lt;korvin&amp;gt; в смысле что будет?&lt;br /&gt;
[20:54:12] &amp;lt;korvin&amp;gt; м... может проще представить кватернион в виде косинусов и дальше по частям?&lt;br /&gt;
[20:54:21] &amp;lt;korvin&amp;gt; покомпонентно в смысле&lt;br /&gt;
[20:54:23] &amp;lt;droot@deeptown.org&amp;gt; это долго считать&lt;br /&gt;
[20:59:55] &amp;lt;droot@deeptown.org&amp;gt; мм ну вообще все понятно&lt;br /&gt;
[21:00:19] &amp;lt;droot@deeptown.org&amp;gt; если сумма вращений задается кватернионом Q = q2 * q1&lt;br /&gt;
[21:00:47] &amp;lt;droot@deeptown.org&amp;gt; то разность вращений будет q2 = Q * q1^(-1) = Q * q1'&lt;br /&gt;
[21:01:36] &amp;lt;droot@deeptown.org&amp;gt; т.е. мы легко можем посчитать кватернион, который является разностью между клиентским и серверным вращениями&lt;br /&gt;
[21:03:54] &amp;lt;droot@deeptown.org&amp;gt; для того, чтобы повернуть тело этим кватернионом, нам нужно приложить к нему момент вращения, направление которого также можно посчитать&lt;br /&gt;
[21:05:56] &amp;lt;droot@deeptown.org&amp;gt; а зависеть он будет от тех же модуля серверной угловой скорости, собсно кватерниона разности, момента вращения, ну и соответственно некоторого коэффициента&lt;br /&gt;
[21:08:54] &amp;lt;droot@deeptown.org&amp;gt; ну а для стабилизации разности угловых скоростей все элементарно: момент вращения будет просто пропорционален разности векторов угловых скоростей (ну и направлен вдоль вектора этой разности)&lt;br /&gt;
[21:11:22] &amp;lt;korvin&amp;gt; так, ну это понятно&lt;br /&gt;
[21:11:32] &amp;lt;korvin&amp;gt; а с перерегулированием что делать?&lt;br /&gt;
[21:11:37] &amp;lt;korvin&amp;gt; ну то есть если перестараемся&lt;br /&gt;
[21:11:41] &amp;lt;droot@deeptown.org&amp;gt; (я вот щас мысленно пытаюсь себе это представить и думаю нсчет вектора разности...)&lt;br /&gt;
[21:12:44] &amp;lt;droot@deeptown.org&amp;gt; там собсно соотношение этих коэффициентов точно такое же должно получиться&lt;br /&gt;
[21:13:34] &amp;lt;droot@deeptown.org&amp;gt; т.е. W &amp;lt; Kw^2 / (4*Kr)&lt;br /&gt;
[21:42:36] &amp;lt;droot@deeptown.org&amp;gt; хочешь почитать веселую книжку? =)&lt;br /&gt;
[21:43:09] &amp;lt;droot@deeptown.org&amp;gt; я тут с аленкой попробовал проконсультироваться, и она мне оч посоветовала =) ландау-лифшиц &amp;quot;механика&amp;quot; называется =)&lt;br /&gt;
[21:55:38] &amp;lt;droot@deeptown.org&amp;gt; вообще, вот что до ограничений сверху для этих всех коэффициентов - я думаю, что надо просто взять некую константу - скажем, 30 - и ей ограничиться&lt;br /&gt;
[21:55:53] &amp;lt;droot@deeptown.org&amp;gt; т.е. Kv &amp;lt; 30&lt;br /&gt;
[21:56:10] &amp;lt;droot@deeptown.org&amp;gt; ну, для Kp можно ограничение чуть больше - скажем, Kp &amp;lt; 50&lt;br /&gt;
[21:58:57] &amp;lt;droot@deeptown.org&amp;gt; мм. а вообще, я бы даже не так сделал&lt;br /&gt;
[21:59:22] &amp;lt;droot@deeptown.org&amp;gt; мне кажется что параметризовать надо не через Kp и Kv, а через Vx и Kp, а уже Kv выражать через них&lt;br /&gt;
[21:59:36] &amp;lt;korvin&amp;gt; мм&lt;br /&gt;
[21:59:39] &amp;lt;korvin&amp;gt; а смысл?&lt;br /&gt;
[21:59:41] &amp;lt;droot@deeptown.org&amp;gt; (ну т.е. Vx - это максимальная скорость)&lt;br /&gt;
[21:59:50] &amp;lt;droot@deeptown.org&amp;gt; а это более понятные пользователю числа&lt;br /&gt;
[22:01:30] &amp;lt;droot@deeptown.org&amp;gt; хотя... ладно, фиг с ним, пусть будет напрямую&lt;br /&gt;
[22:01:40] &amp;lt;droot@deeptown.org&amp;gt; надо еще подумать, какие значения по-умолчанию лучше всего взять&lt;br /&gt;
[22:01:59] &amp;lt;droot@deeptown.org&amp;gt; ну Vx видимо надо брать где-то 10 как раз - это 36 км/ч&lt;br /&gt;
[22:02:22] &amp;lt;korvin&amp;gt; 10 м/с не жирно ли?&lt;br /&gt;
[22:02:24] &amp;lt;droot@deeptown.org&amp;gt; при большей уже вряд ли будут заметны эти силы&lt;br /&gt;
[22:02:55] &amp;lt;droot@deeptown.org&amp;gt; ну 36 км/ч - это где-то как раз граница воспринимаемых скоростей имхо&lt;br /&gt;
[22:04:02] &amp;lt;droot@deeptown.org&amp;gt; Kv предлагаю взять равным где-то 20&lt;br /&gt;
[22:04:46] &amp;lt;droot@deeptown.org&amp;gt; при этом будет хороший запас до сваливания из-за шага рассчета, но и время стабилизации будет достаточно малым&lt;br /&gt;
[22:04:55] &amp;lt;droot@deeptown.org&amp;gt; ну а Kp щас посчитаем&lt;br /&gt;
[22:05:11] &amp;lt;droot@deeptown.org&amp;gt; Vx = Kv^2 / (4*Kp)&lt;br /&gt;
[22:05:26] &amp;lt;droot@deeptown.org&amp;gt; Kp = Vx * 4 / Kv^2&lt;br /&gt;
[22:05:37] &amp;lt;droot@deeptown.org&amp;gt; тьфу&lt;br /&gt;
[22:05:57] &amp;lt;droot@deeptown.org&amp;gt; Kp = Kv&amp;amp;2 / (Vx*4)&lt;br /&gt;
[22:06:31] &amp;lt;droot@deeptown.org&amp;gt; Kp = 20^2 / 40 = 10&lt;br /&gt;
[22:06:40] &amp;lt;droot@deeptown.org&amp;gt; ну, вполне себе круглые числа =)&lt;br /&gt;
[22:06:48] &amp;lt;droot@deeptown.org&amp;gt; Vx = 10, Kp = 10, Kv = 20&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rnd</name></author>	</entry>

	<entry>
		<id>http://man.deeptown.org/index.php/Deeptown_SDK</id>
		<title>Deeptown SDK</title>
		<link rel="alternate" type="text/html" href="http://man.deeptown.org/index.php/Deeptown_SDK"/>
				<updated>2008-08-18T22:19:04Z</updated>
		
		<summary type="html">&lt;p&gt;Rnd: /* Требования к системе */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Описание Deeptown SDK ==&lt;br /&gt;
&lt;br /&gt;
'''Deeptown Software Development Kit''' — это набор программ, утилит и библиотек для разработки приложений для платформы Deeptown.&lt;br /&gt;
&lt;br /&gt;
В публичном доступе выпускается бинарная версия SDK — т.е. набор библиотек и программ, скомпилированных для различных операционных систем. Исходные коды по прежнему остаются закрытыми; доступ к ним предоставляется только при необходимости и при подписании соответствующего соглашения о конфиденциальности. Если Вас это интересует — [[Обратная связь|пишите]].&lt;br /&gt;
&lt;br /&gt;
== Структура SDK ==&lt;br /&gt;
&lt;br /&gt;
SDK поставляется в виде отдельных небольших пакетов. Для различных задач Вам может потребоваться только часть из них. В ближайшем будущем, на этой Wiki будет выложена подробная информация о существующих пакетах и их составе.&lt;br /&gt;
&lt;br /&gt;
== Установка SDK на POSIX-совместимых системах ==&lt;br /&gt;
&lt;br /&gt;
=== Требования к системе ===&lt;br /&gt;
&lt;br /&gt;
На данный момент из всех POSIX-совместимых систем Deeptown SDK поддерживает только ОС Linux. В ближайшем будущем планируется поддержка FreeBSD; остальные POSIX-системы мы не поддерживаем, т.к. это почти никому не требуется. Если Вам нужен дистрибутив для какой-то конкретной системы, Вы можете [[Обратная связь|написать нам]], и мы постараемся собрать дистрибутив для Вашей системы, если это будет возможно.&lt;br /&gt;
&lt;br /&gt;
Для ядра системы требуются:&lt;br /&gt;
* gcc версии &amp;gt;=3.4 с модулем поддержки языка C++ (g++);&lt;br /&gt;
* make&lt;br /&gt;
* perl &amp;gt;= 5.0&lt;br /&gt;
* wget&lt;br /&gt;
* dev-perl/Term-ReadPassword&lt;br /&gt;
* ogre&lt;br /&gt;
* ode&lt;br /&gt;
* ois&lt;br /&gt;
* openal&lt;br /&gt;
&lt;br /&gt;
Кроме того, для некоторых важных модулей требуются библиотеки:&lt;br /&gt;
* libpcre &amp;gt;=6.6&lt;br /&gt;
* sqlite3&lt;br /&gt;
* wxGTK&lt;br /&gt;
&lt;br /&gt;
=== Подготовка к установке ===&lt;br /&gt;
&lt;br /&gt;
Все программы и библиотеки, входящие в состав Deeptown SDK, собраны для установки в директорию /opt/deeptown. Абсолютно все изменения в Вашей системе будут происходить именно в этой директории; больше ничего использоваться не будет. Это сделано специально - для удобства удаления и/или переустановки SDK.&lt;br /&gt;
&lt;br /&gt;
Для удобства использования программ, добавьте путь /opt/deeptown/bin к пути поиска программ (переменная среды PATH). Если Вы используете bash, это можно сделать, добавив в $HOME/.bash_profile следующую строчку:&lt;br /&gt;
&lt;br /&gt;
 export PATH=/opt/deeptown/bin:$PATH&lt;br /&gt;
&lt;br /&gt;
Кроме того, рекомендуется установить для себя права на запись в директорию /opt/deeptown, чтобы производить установку новых пакетов под обычным пользователем, а не под рутом. Просто создайте эту директорию вручную и измените ее владельца на свою рабочую учетную запись.&lt;br /&gt;
&lt;br /&gt;
=== Установка dpmake ===&lt;br /&gt;
&lt;br /&gt;
Наконец, переходим к процессу установки.&lt;br /&gt;
&lt;br /&gt;
В первую очередь нужно вручную скачать и установить утилиту dpmake. Она предназначена для сборки библиотек на платформе Диптаун; она же служит простейшим менеджером пакетов Deeptown SDK.&lt;br /&gt;
&lt;br /&gt;
Последняя версия dpmake находится по адресу [http://dao.deeptown.org/release/all/dpmake.tbz2 http://dao.deeptown.org/release/all/dpmake.tbz2].&lt;br /&gt;
&lt;br /&gt;
Скачав ее, наберите следующие команды:&lt;br /&gt;
 tar -jxf dpmake.tbz2        # распаковываем архив&lt;br /&gt;
 cd dpmake                   # переходим в директорию сборки&lt;br /&gt;
 ./build                     # настройка и компиляция&lt;br /&gt;
 make install                # установка в /opt/deeptown&lt;br /&gt;
&lt;br /&gt;
Последняя команда может потребовать привелегий суперпользователя, если Вы не последовали предыдущему совету разрешить себе права на запись в /opt/deeptown.&lt;br /&gt;
&lt;br /&gt;
Чтобы убедиться, что Ваша система поддерживается, наберите команду&lt;br /&gt;
 dpmake_config --platform&lt;br /&gt;
&lt;br /&gt;
Эта команда выведет имя платформы, состоящее из названия ОС, архитектуры процессора и версии libc. На данный момент Deeptown SDK поддерживает следующие платформы:&lt;br /&gt;
* linux-i686-libc6&lt;br /&gt;
* linux-x86_64-libc6&lt;br /&gt;
&lt;br /&gt;
Если предыдущая команда вывела одну из указанных в списке платформ - все нормально, Вы можете продолжать установку.&lt;br /&gt;
&lt;br /&gt;
В противном случае, Вы можете попробовать одно из следующих действий:&lt;br /&gt;
* указать платформу вручную, передавая команде dpmake параметр ''--platform=имя_платформы_из_списка'';&lt;br /&gt;
* [[Обратная связь|Написать нам]] просьбу собрать Deeptown SDK для Вашей платформы. Мы постараемся сделать это как можно скорее; это не должно занять больше недели времени (в зависимости от занятости разработчиков).&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Для установки пакетов служит команда&lt;br /&gt;
 dpmake binpkg имя_пакета&lt;br /&gt;
&lt;br /&gt;
Она автоматически загружает требуемый пакет с сервера и распаковывает его.&lt;br /&gt;
&lt;br /&gt;
Полный список пакетов в настоящее время выглядит так:&lt;br /&gt;
&lt;br /&gt;
* osa&lt;br /&gt;
* dptools&lt;br /&gt;
* bxl&lt;br /&gt;
* dpkernel&lt;br /&gt;
* deeptown &lt;br /&gt;
** diss&lt;br /&gt;
** gide&lt;br /&gt;
** mein&lt;br /&gt;
** network&lt;br /&gt;
** security&lt;br /&gt;
** servers&lt;br /&gt;
** startup&lt;br /&gt;
** stream&lt;br /&gt;
** tinyftpd&lt;br /&gt;
** utils&lt;br /&gt;
*** kpp_compiler&lt;br /&gt;
*** graphics_config&lt;br /&gt;
** world&lt;br /&gt;
&lt;br /&gt;
'''Примечание''': Пакеты '''deeptown''' и '''utils''' являются т. н. ''метапакетами'', содержащими все пакеты уровнем ниже. Таким образом, при установке пакета utils, будут установлены пакеты kpp_compiler и graphics_config; а при установке пакета deeptown — все пакеты от diss до world включительно.&lt;br /&gt;
&lt;br /&gt;
Более подробно почитать о назначении пакетов можно здесь: [[Описание установочных пакетов]].&lt;br /&gt;
&lt;br /&gt;
=== Завершение установки ===&lt;br /&gt;
&lt;br /&gt;
Наконец, для использования SDK, требуется выполнить следующие действия.&lt;br /&gt;
&lt;br /&gt;
Прежде всего необходимо установить файлы данных, с которыми будут работать программы из SDK. Подробное описание этих файлов и их форматов можно найти в соответствующей документации.&lt;br /&gt;
&lt;br /&gt;
Последнюю версию медиаданных всегда можно найти в форматах [http://dao.deeptown.org/release/all/media.rar rar] или [http://dao.deeptown.org/release/all/media.tar.bz2 tar.bz2]. Загрузите и распакуйте этот архив в любое удобное для Вас место на диске.&lt;br /&gt;
&lt;br /&gt;
При этом необходимо учесть следующие моменты:&lt;br /&gt;
* программам будет требоваться доступ на запись в пределах этой директории;&lt;br /&gt;
* многое из того, что Вы будете создавать с использованием Deeptown SDK, будет сохраняться в рамках этой директории. Поэтому, когда загружаете новую версию media, не удаляйте старую, а распаковывайте файлы поверх предыдущих.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- После того, как директория media распакована, нужно перейти в нее, скопировать файл config.dsh.sample в файл config.dsh, и отредактировать его в соответствии со своими нуждами. В файле приводятся подробные комментарии ко всем опциям. За более подробной информацией я опять же отсылаю Вас к соответствующей документации. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И самое последнее, что необходимо сделать — это определить три переменные среды, которые используются для поиска необходимых файлов:&lt;br /&gt;
* DEEPTOWN_LIBRARY = /opt/deeptown/lib — путь к плагинам;&lt;br /&gt;
* DEEPTOWN_MEDIA — путь к директории media, про которую шла речь выше;&lt;br /&gt;
* DEEPTOWN_CONFIG = /opt/deeptown/etc/deeptown — путь к файлам конфигурации.&lt;br /&gt;
&lt;br /&gt;
Для того же bash соответствующие строки в .bash_profile будут выглядеть следующим образом:&lt;br /&gt;
 export DEEPTOWN_LIBRARY=&amp;quot;/opt/deeptown/lib&amp;quot;&lt;br /&gt;
 export DEEPTOWN_CONFIG=&amp;quot;/opt/deeptown/etc/deeptown&amp;quot;&lt;br /&gt;
 export DEEPTOWN_MEDIA=&amp;quot;/home/user/deeptown/media&amp;quot;   # замените на свой путь!&lt;br /&gt;
&lt;br /&gt;
=== Быстрый старт использования компилятора K++ ===&lt;br /&gt;
&lt;br /&gt;
Текущий пользователь — user.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 1. Создаем /opt/deeptown и устанавливаем права:&lt;br /&gt;
sudo mkdir /opt/deeptown&lt;br /&gt;
sudo chown user:user /opt/deeptown&lt;br /&gt;
&lt;br /&gt;
# 2. Устанавливаем dpmake&lt;br /&gt;
cd ~&lt;br /&gt;
wget http://dao.deeptown.org/release/all/dpmake.tbz2&lt;br /&gt;
tar -jxf dpmake.tbz2&lt;br /&gt;
cd dpmake&lt;br /&gt;
./build&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
# 3. Прописываем необходимые переменные среды&lt;br /&gt;
cd ~&lt;br /&gt;
echo 'export PATH=&amp;quot;/opt/deeptown/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; .bash_profile&lt;br /&gt;
echo 'export DEEPTOWN_LIBRARY=&amp;quot;/opt/deeptown/lib&amp;quot;' &amp;gt;&amp;gt; .bash_profile&lt;br /&gt;
echo 'export DEEPTOWN_CONFIG=&amp;quot;/opt/deeptown/etc/deeptown&amp;quot;' &amp;gt;&amp;gt; .bash_profile&lt;br /&gt;
echo 'export DEEPTOWN_MEDIA=&amp;quot;/home/user/deeptown/media&amp;quot;' &amp;gt;&amp;gt; .bash_profile&lt;br /&gt;
. .bash_profile&lt;br /&gt;
&lt;br /&gt;
# 4. Устанавливаем необходимые пакеты&lt;br /&gt;
dpmake binpkg osa&lt;br /&gt;
dpmake binpkg bxl&lt;br /&gt;
dpmake binpkg dpkernel&lt;br /&gt;
dpmake binpkg gide&lt;br /&gt;
dpmake binpkg kpp_compiler&lt;br /&gt;
&lt;br /&gt;
# 5. Распаковываем media&lt;br /&gt;
cd ~&lt;br /&gt;
mkdir -p deeptown/media&lt;br /&gt;
cd deeptown/media&lt;br /&gt;
wget http://dao.deeptown.org/release/all/media.rar&lt;br /&gt;
rar x media.rar&lt;br /&gt;
&lt;br /&gt;
# 6. Используем&lt;br /&gt;
cd ~&lt;br /&gt;
echo 'export function main() { puts(&amp;quot;Hello, world!\n&amp;quot;); }' &amp;gt; test.kpp&lt;br /&gt;
kpp -e test.kpp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запустите kpp без параметров, чтобы получить полный список поддерживаемых опций.&lt;br /&gt;
&lt;br /&gt;
== Установка SDK на ОС Windows ==&lt;br /&gt;
&lt;br /&gt;
На ОС Windows все гораздо проще: мы подготовили программу-инсталлятор, которая все сделает сама.&lt;br /&gt;
&lt;br /&gt;
Ссылки на инсталляторы см. ниже.&lt;br /&gt;
&lt;br /&gt;
Обращаем Ваше внимание на то, что при первом запуске требуется подождать некоторое время, пока идет индексация содержимого. При последующих запусках ждать будет не нужно.&lt;br /&gt;
&lt;br /&gt;
'''Обратите внимание''', что устанавливаемый файл &amp;lt;tt&amp;gt;kpp.exe&amp;lt;/tt&amp;gt; является консольной утилитой. Его нужно запускать из командной строки. Для получения списка возможных параметров, наберите &amp;lt;tt&amp;gt;kpp -h&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Список дистрибутивов ===&lt;br /&gt;
&lt;br /&gt;
Ниже приведен список дистрибутивов Deeptown SDK для Windows различных версий. Пожалуйста, указывайте версию дистрибутива в отчетах об ошибках.&lt;br /&gt;
&lt;br /&gt;
* Последняя выпущенная версия:&lt;br /&gt;
** 15.08.2008: [http://dao.deeptown.org/release/windows-x86/deep-sdk-20080815.exe deep-sdk-20080815.exe]&lt;br /&gt;
* Более ранние версии:&lt;br /&gt;
** 16.07.2008: [http://dao.deeptown.org/release/windows-x86/deep-sdk-20080716.exe deep-sdk-20080716.exe]&lt;br /&gt;
** 19.06.2008: [http://dao.deeptown.org/release/windows-x86/deep-sdk-20080619.exe deep-sdk-20080619.exe]&lt;br /&gt;
** 12.05.2008: [http://dao.deeptown.org/release/windows-x86/deep_sdk_win32.exe deep_sdk_win32.exe]&lt;br /&gt;
&lt;br /&gt;
== Что дальше? ==&lt;br /&gt;
&lt;br /&gt;
Дальше, если все прошло успешно, вы можете обратиться к странице &amp;quot;[[с чего начать]]&amp;quot;, где вкратце описано что и как можно делать.&lt;/div&gt;</summary>
		<author><name>Rnd</name></author>	</entry>

	<entry>
		<id>http://man.deeptown.org/index.php/Deeptown_SDK</id>
		<title>Deeptown SDK</title>
		<link rel="alternate" type="text/html" href="http://man.deeptown.org/index.php/Deeptown_SDK"/>
				<updated>2008-08-18T22:06:11Z</updated>
		
		<summary type="html">&lt;p&gt;Rnd: /* Требования к системе */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Описание Deeptown SDK ==&lt;br /&gt;
&lt;br /&gt;
'''Deeptown Software Development Kit''' — это набор программ, утилит и библиотек для разработки приложений для платформы Deeptown.&lt;br /&gt;
&lt;br /&gt;
В публичном доступе выпускается бинарная версия SDK — т.е. набор библиотек и программ, скомпилированных для различных операционных систем. Исходные коды по прежнему остаются закрытыми; доступ к ним предоставляется только при необходимости и при подписании соответствующего соглашения о конфиденциальности. Если Вас это интересует — [[Обратная связь|пишите]].&lt;br /&gt;
&lt;br /&gt;
== Структура SDK ==&lt;br /&gt;
&lt;br /&gt;
SDK поставляется в виде отдельных небольших пакетов. Для различных задач Вам может потребоваться только часть из них. В ближайшем будущем, на этой Wiki будет выложена подробная информация о существующих пакетах и их составе.&lt;br /&gt;
&lt;br /&gt;
== Установка SDK на POSIX-совместимых системах ==&lt;br /&gt;
&lt;br /&gt;
=== Требования к системе ===&lt;br /&gt;
&lt;br /&gt;
На данный момент из всех POSIX-совместимых систем Deeptown SDK поддерживает только ОС Linux. В ближайшем будущем планируется поддержка FreeBSD; остальные POSIX-системы мы не поддерживаем, т.к. это почти никому не требуется. Если Вам нужен дистрибутив для какой-то конкретной системы, Вы можете [[Обратная связь|написать нам]], и мы постараемся собрать дистрибутив для Вашей системы, если это будет возможно.&lt;br /&gt;
&lt;br /&gt;
Для ядра системы требуются:&lt;br /&gt;
* gcc версии &amp;gt;=3.4 с модулем поддержки языка C++ (g++);&lt;br /&gt;
* make&lt;br /&gt;
* perl &amp;gt;= 5.0&lt;br /&gt;
* wget&lt;br /&gt;
* dev-perl/Term-ReadPassword&lt;br /&gt;
* ogre&lt;br /&gt;
* ode&lt;br /&gt;
* ois&lt;br /&gt;
&lt;br /&gt;
Кроме того, для некоторых важных модулей требуются библиотеки:&lt;br /&gt;
* libpcre &amp;gt;=6.6&lt;br /&gt;
* sqlite3&lt;br /&gt;
* wxGTK&lt;br /&gt;
&lt;br /&gt;
=== Подготовка к установке ===&lt;br /&gt;
&lt;br /&gt;
Все программы и библиотеки, входящие в состав Deeptown SDK, собраны для установки в директорию /opt/deeptown. Абсолютно все изменения в Вашей системе будут происходить именно в этой директории; больше ничего использоваться не будет. Это сделано специально - для удобства удаления и/или переустановки SDK.&lt;br /&gt;
&lt;br /&gt;
Для удобства использования программ, добавьте путь /opt/deeptown/bin к пути поиска программ (переменная среды PATH). Если Вы используете bash, это можно сделать, добавив в $HOME/.bash_profile следующую строчку:&lt;br /&gt;
&lt;br /&gt;
 export PATH=/opt/deeptown/bin:$PATH&lt;br /&gt;
&lt;br /&gt;
Кроме того, рекомендуется установить для себя права на запись в директорию /opt/deeptown, чтобы производить установку новых пакетов под обычным пользователем, а не под рутом. Просто создайте эту директорию вручную и измените ее владельца на свою рабочую учетную запись.&lt;br /&gt;
&lt;br /&gt;
=== Установка dpmake ===&lt;br /&gt;
&lt;br /&gt;
Наконец, переходим к процессу установки.&lt;br /&gt;
&lt;br /&gt;
В первую очередь нужно вручную скачать и установить утилиту dpmake. Она предназначена для сборки библиотек на платформе Диптаун; она же служит простейшим менеджером пакетов Deeptown SDK.&lt;br /&gt;
&lt;br /&gt;
Последняя версия dpmake находится по адресу [http://dao.deeptown.org/release/all/dpmake.tbz2 http://dao.deeptown.org/release/all/dpmake.tbz2].&lt;br /&gt;
&lt;br /&gt;
Скачав ее, наберите следующие команды:&lt;br /&gt;
 tar -jxf dpmake.tbz2        # распаковываем архив&lt;br /&gt;
 cd dpmake                   # переходим в директорию сборки&lt;br /&gt;
 ./build                     # настройка и компиляция&lt;br /&gt;
 make install                # установка в /opt/deeptown&lt;br /&gt;
&lt;br /&gt;
Последняя команда может потребовать привелегий суперпользователя, если Вы не последовали предыдущему совету разрешить себе права на запись в /opt/deeptown.&lt;br /&gt;
&lt;br /&gt;
Чтобы убедиться, что Ваша система поддерживается, наберите команду&lt;br /&gt;
 dpmake_config --platform&lt;br /&gt;
&lt;br /&gt;
Эта команда выведет имя платформы, состоящее из названия ОС, архитектуры процессора и версии libc. На данный момент Deeptown SDK поддерживает следующие платформы:&lt;br /&gt;
* linux-i686-libc6&lt;br /&gt;
* linux-x86_64-libc6&lt;br /&gt;
&lt;br /&gt;
Если предыдущая команда вывела одну из указанных в списке платформ - все нормально, Вы можете продолжать установку.&lt;br /&gt;
&lt;br /&gt;
В противном случае, Вы можете попробовать одно из следующих действий:&lt;br /&gt;
* указать платформу вручную, передавая команде dpmake параметр ''--platform=имя_платформы_из_списка'';&lt;br /&gt;
* [[Обратная связь|Написать нам]] просьбу собрать Deeptown SDK для Вашей платформы. Мы постараемся сделать это как можно скорее; это не должно занять больше недели времени (в зависимости от занятости разработчиков).&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Для установки пакетов служит команда&lt;br /&gt;
 dpmake binpkg имя_пакета&lt;br /&gt;
&lt;br /&gt;
Она автоматически загружает требуемый пакет с сервера и распаковывает его.&lt;br /&gt;
&lt;br /&gt;
Полный список пакетов в настоящее время выглядит так:&lt;br /&gt;
&lt;br /&gt;
* osa&lt;br /&gt;
* dptools&lt;br /&gt;
* bxl&lt;br /&gt;
* dpkernel&lt;br /&gt;
* deeptown &lt;br /&gt;
** diss&lt;br /&gt;
** gide&lt;br /&gt;
** mein&lt;br /&gt;
** network&lt;br /&gt;
** security&lt;br /&gt;
** servers&lt;br /&gt;
** startup&lt;br /&gt;
** stream&lt;br /&gt;
** tinyftpd&lt;br /&gt;
** utils&lt;br /&gt;
*** kpp_compiler&lt;br /&gt;
*** graphics_config&lt;br /&gt;
** world&lt;br /&gt;
&lt;br /&gt;
'''Примечание''': Пакеты '''deeptown''' и '''utils''' являются т. н. ''метапакетами'', содержащими все пакеты уровнем ниже. Таким образом, при установке пакета utils, будут установлены пакеты kpp_compiler и graphics_config; а при установке пакета deeptown — все пакеты от diss до world включительно.&lt;br /&gt;
&lt;br /&gt;
Более подробно почитать о назначении пакетов можно здесь: [[Описание установочных пакетов]].&lt;br /&gt;
&lt;br /&gt;
=== Завершение установки ===&lt;br /&gt;
&lt;br /&gt;
Наконец, для использования SDK, требуется выполнить следующие действия.&lt;br /&gt;
&lt;br /&gt;
Прежде всего необходимо установить файлы данных, с которыми будут работать программы из SDK. Подробное описание этих файлов и их форматов можно найти в соответствующей документации.&lt;br /&gt;
&lt;br /&gt;
Последнюю версию медиаданных всегда можно найти в форматах [http://dao.deeptown.org/release/all/media.rar rar] или [http://dao.deeptown.org/release/all/media.tar.bz2 tar.bz2]. Загрузите и распакуйте этот архив в любое удобное для Вас место на диске.&lt;br /&gt;
&lt;br /&gt;
При этом необходимо учесть следующие моменты:&lt;br /&gt;
* программам будет требоваться доступ на запись в пределах этой директории;&lt;br /&gt;
* многое из того, что Вы будете создавать с использованием Deeptown SDK, будет сохраняться в рамках этой директории. Поэтому, когда загружаете новую версию media, не удаляйте старую, а распаковывайте файлы поверх предыдущих.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- После того, как директория media распакована, нужно перейти в нее, скопировать файл config.dsh.sample в файл config.dsh, и отредактировать его в соответствии со своими нуждами. В файле приводятся подробные комментарии ко всем опциям. За более подробной информацией я опять же отсылаю Вас к соответствующей документации. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И самое последнее, что необходимо сделать — это определить три переменные среды, которые используются для поиска необходимых файлов:&lt;br /&gt;
* DEEPTOWN_LIBRARY = /opt/deeptown/lib — путь к плагинам;&lt;br /&gt;
* DEEPTOWN_MEDIA — путь к директории media, про которую шла речь выше;&lt;br /&gt;
* DEEPTOWN_CONFIG = /opt/deeptown/etc/deeptown — путь к файлам конфигурации.&lt;br /&gt;
&lt;br /&gt;
Для того же bash соответствующие строки в .bash_profile будут выглядеть следующим образом:&lt;br /&gt;
 export DEEPTOWN_LIBRARY=&amp;quot;/opt/deeptown/lib&amp;quot;&lt;br /&gt;
 export DEEPTOWN_CONFIG=&amp;quot;/opt/deeptown/etc/deeptown&amp;quot;&lt;br /&gt;
 export DEEPTOWN_MEDIA=&amp;quot;/home/user/deeptown/media&amp;quot;   # замените на свой путь!&lt;br /&gt;
&lt;br /&gt;
=== Быстрый старт использования компилятора K++ ===&lt;br /&gt;
&lt;br /&gt;
Текущий пользователь — user.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 1. Создаем /opt/deeptown и устанавливаем права:&lt;br /&gt;
sudo mkdir /opt/deeptown&lt;br /&gt;
sudo chown user:user /opt/deeptown&lt;br /&gt;
&lt;br /&gt;
# 2. Устанавливаем dpmake&lt;br /&gt;
cd ~&lt;br /&gt;
wget http://dao.deeptown.org/release/all/dpmake.tbz2&lt;br /&gt;
tar -jxf dpmake.tbz2&lt;br /&gt;
cd dpmake&lt;br /&gt;
./build&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
# 3. Прописываем необходимые переменные среды&lt;br /&gt;
cd ~&lt;br /&gt;
echo 'export PATH=&amp;quot;/opt/deeptown/bin:$PATH&amp;quot;' &amp;gt;&amp;gt; .bash_profile&lt;br /&gt;
echo 'export DEEPTOWN_LIBRARY=&amp;quot;/opt/deeptown/lib&amp;quot;' &amp;gt;&amp;gt; .bash_profile&lt;br /&gt;
echo 'export DEEPTOWN_CONFIG=&amp;quot;/opt/deeptown/etc/deeptown&amp;quot;' &amp;gt;&amp;gt; .bash_profile&lt;br /&gt;
echo 'export DEEPTOWN_MEDIA=&amp;quot;/home/user/deeptown/media&amp;quot;' &amp;gt;&amp;gt; .bash_profile&lt;br /&gt;
. .bash_profile&lt;br /&gt;
&lt;br /&gt;
# 4. Устанавливаем необходимые пакеты&lt;br /&gt;
dpmake binpkg osa&lt;br /&gt;
dpmake binpkg bxl&lt;br /&gt;
dpmake binpkg dpkernel&lt;br /&gt;
dpmake binpkg gide&lt;br /&gt;
dpmake binpkg kpp_compiler&lt;br /&gt;
&lt;br /&gt;
# 5. Распаковываем media&lt;br /&gt;
cd ~&lt;br /&gt;
mkdir -p deeptown/media&lt;br /&gt;
cd deeptown/media&lt;br /&gt;
wget http://dao.deeptown.org/release/all/media.rar&lt;br /&gt;
rar x media.rar&lt;br /&gt;
&lt;br /&gt;
# 6. Используем&lt;br /&gt;
cd ~&lt;br /&gt;
echo 'export function main() { puts(&amp;quot;Hello, world!\n&amp;quot;); }' &amp;gt; test.kpp&lt;br /&gt;
kpp -e test.kpp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запустите kpp без параметров, чтобы получить полный список поддерживаемых опций.&lt;br /&gt;
&lt;br /&gt;
== Установка SDK на ОС Windows ==&lt;br /&gt;
&lt;br /&gt;
На ОС Windows все гораздо проще: мы подготовили программу-инсталлятор, которая все сделает сама.&lt;br /&gt;
&lt;br /&gt;
Ссылки на инсталляторы см. ниже.&lt;br /&gt;
&lt;br /&gt;
Обращаем Ваше внимание на то, что при первом запуске требуется подождать некоторое время, пока идет индексация содержимого. При последующих запусках ждать будет не нужно.&lt;br /&gt;
&lt;br /&gt;
'''Обратите внимание''', что устанавливаемый файл &amp;lt;tt&amp;gt;kpp.exe&amp;lt;/tt&amp;gt; является консольной утилитой. Его нужно запускать из командной строки. Для получения списка возможных параметров, наберите &amp;lt;tt&amp;gt;kpp -h&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Список дистрибутивов ===&lt;br /&gt;
&lt;br /&gt;
Ниже приведен список дистрибутивов Deeptown SDK для Windows различных версий. Пожалуйста, указывайте версию дистрибутива в отчетах об ошибках.&lt;br /&gt;
&lt;br /&gt;
* Последняя выпущенная версия:&lt;br /&gt;
** 15.08.2008: [http://dao.deeptown.org/release/windows-x86/deep-sdk-20080815.exe deep-sdk-20080815.exe]&lt;br /&gt;
* Более ранние версии:&lt;br /&gt;
** 16.07.2008: [http://dao.deeptown.org/release/windows-x86/deep-sdk-20080716.exe deep-sdk-20080716.exe]&lt;br /&gt;
** 19.06.2008: [http://dao.deeptown.org/release/windows-x86/deep-sdk-20080619.exe deep-sdk-20080619.exe]&lt;br /&gt;
** 12.05.2008: [http://dao.deeptown.org/release/windows-x86/deep_sdk_win32.exe deep_sdk_win32.exe]&lt;br /&gt;
&lt;br /&gt;
== Что дальше? ==&lt;br /&gt;
&lt;br /&gt;
Дальше, если все прошло успешно, вы можете обратиться к странице &amp;quot;[[с чего начать]]&amp;quot;, где вкратце описано что и как можно делать.&lt;/div&gt;</summary>
		<author><name>Rnd</name></author>	</entry>

	</feed>