Об’єкти і об’єктно орієнтоване програмування у Javascript

Ми вже знаємо основи використання об’єктів, а тепер час зазирнути глибше.

Подібно до масивів, об’єкти в Javascript є контейнерами (також відомими як агрегатні або складні типи даних). Об’єкти мають дві основні відмінності від масивів:

  • Масиви містять значення, проіндексовані числами; об’єкти містять властивості індексовані рядками або символами.
  • Масиви впорядковані (arr[0] завжди іде перед arr[1]); об’єкти ж ні (ви не можете гарантувати, що obj.a іде перед obj.b).

Ці відмінності доволі езотеричні (але важливі), отже, давайте думати про властивості (це не каламбур) завдяки яким об’єкти дійсно особливі. Властивість складається з ключа (рядок чи символ) і значення. Що робить об’єкти особливими так це те, що ви можете доступатись до властивостей за їх ключем.
Читати далі…

Категорії:Javascript Позначки:,

Керування багатьма роботами

Організаційні принципи колективної поведінки

  • Кожен діє незалежно
  • Дії базуються на локальній інформації (ніхто не має глобальної картинки)
  • Анонімна координація (неважливо з ким ти взаємодієш)

Складність

n роботів, m перепон.

Розмірність простору станів збільшується лінійно із кількістю роботів
Кількість потенційних взаємодій зростає як n*n O(mn + n2)
Кількість потенційних взаємодій з навколишніми перепонами зростає як mn
Кількість призначень роботів до цільових позицій n!

start_to_goal

Призначення цілей роботам
\phi_{i,j}=\begin{cases}1\\0\end{cases}

Планування траєкторій повинно виконуватись у спільному просторі станів – O(en)
\mathbf{X}(t) = \begin{bmatrix}\mathbf{x}_1(t)\\\mathbf{x}_2(t)\\ \dots \\ \mathbf{x}_n(t)\\ \end{bmatrix}

\gamma(t):[t_o,t_f] \rightarrow \mathbf{X}(t)

Також необхідно вимагати, щоб найменша відстань між роботами становила не менше ніж подвоєний радіус.

Оптимальність

Вважаємо, що у нас є функціонал, що описує міру оптимальності і нам потрібно мінімізувати його.

Найскладнішими завданнями є призначення роботам цілей і планування траєкторій. І їх потрібно виконувати паралельно.

Чотири ключові ідеї:

  1. Паралельне призначення цілей і траєкторій
  2. Лідер-послідовник мережі
  3. Анонімність
  4. Спільне використання інформації
Категорії:Uncategorized

Кількість відмінних двійкових дерев з n вершинами

Кількість відмінних двійкових дерев з n позначеними вершинами

Для двійкового дерева з n вершинами, кількість ребер становить n-1. Отже, цю задачу можна звести до кількості варіантів розташування n-1 ребер у n вершин. Ребро можна зробити або лівим, або правим. Читати далі…

Категорії:Математика Позначки:

Навіщо потрібен make_unique

make_unique завжди варто і завжди правильно використовувати у коді тим більше, що він не має ніякого негативного впливу на швидкодію.
Читати далі…

Категорії:C++ Позначки:,

Похідна кватерніона

Чому кватерніони, а не матриці повороту

З багатьох причин одиничні кватерніони, чотириелементні вектори, ліпший вибір ніж матриці повороту. Для симуляції руху твердого тіла найголовнішою причиною вибору кватерніонів є числовий самоплив. Припустимо, що ми відслідковуємо за орієнтацією твердого тіла за допомогою формули

\dot R(t) = \begin{pmatrix} 0 & -\omega_z(t) & \omega_y(t) \\ \omega_z(t) & 0 & -\omega_x(t) \\ -\omega_y(t) & \omega_x(t) & 0 \end{pmatrix} R(t),

тут R(t) є матрицею поворота, а вектор \omega(t) описує обертання тіла. Напрямок \omega(t) дає напрямок вісі обертання, а його довжина говорить про швидкість обертання.

По мірі того як ми оновлюємо R(t) згідно з цією формулою, ми неминуче отримуємо числовий самоплив. Числова помилка накопичуватиметься у коефіцієнтах матриці, і зрештою на екрані тіло відображатиметься скошеним.
Читати далі…

Категорії:Математика Позначки:

Задача на деформацію стрижня під осьовим навантаженням

MoM_2.14
Алюмінієвий стрижень ABC (E = 70\times 10^9 N/m^2), який складається з двох частин AB та ВС, необхідно замінити на циліндричний сталевий стрижень DE (E = 210\times 10^9 N/m^2) такої ж довжини. Визначити найменший допустимий діаметр d для сталевого стрижня, такий щоб його вертикальна деформація під тим самим навантаженням не перевищувала деформацію алюмінієвого стрижня і якщо допустиме напруження в сталевому стрижні не повинно перевищувати 240 МПа.

Розв’язання:

Нам знадобляться такі дві формули:
\sigma = \frac{F}{S} = \frac{F}{\pi*d^2/4},
\sigma = \epsilon E, де \epsilon = \frac{\delta}{L}.
Читати далі…

Категорії:Фізика Позначки:,

Досконала переадресація

Загальна форма проблеми переадресації має такий вигляд:

Для заданого виразу E(a1, a2, ..., an), що залежить від (шаблонних) параметрів a1, a2, ..., an, написати функцію (об’єкт) f такий, що виклик f(a1, a2, ..., an) тотожний виклику E(a1, a2, ..., an).

Стандарт C++11 уможливив створення таких функцій (об’єктів) завдяки rvalue посиланням.

Розглянемо просту функцію-фабрику:

template<typename T, typename Arg> 
shared_ptr<T> factory(Arg arg)
{ 
  return shared_ptr<T>(new T(arg));
}

Читати далі…

Категорії:C++ Позначки:, ,