...

суббота, 18 января 2014 г.

Небольшая игра «Крестики-нолики» на JavaScript



Это пост про небольшую игру «Крестики-нолики», которая была написана в целях пополнения опыта программирования на JS. Здесь применяются canvas и DojoBase. Библиотека используется для работы с событиями и для нахождения элементов по id(это очень удобно). Сanvas используется для отрисовки игрового поля.

И сами «Крестики-нолики».



Правила «Крестиков-ноликов» из этой реализации простые: необходимо собрать ряд из пяти элементов(в любом направлении) раньше противника. Количество ходов одинаково, то есть, если нолики(они ходят первыми) собрали ряд, а у крестиков есть линия из четырех элементов, то раунд не заканчивается. Да, в этой реализации одна игра состоит из нескольких раундов. Игра заканчивается тогда, когда на поле не останется свободных клеток. Победителем становится тот, кто больше раундов выиграл. Клетки, которые были использованы в прошлых раундах заливаются и становятся не активными. Само же разрешение поля устанавливается в зависимости от разрешения окна браузера.
Создание AI



Тут самое интересное, конечно, это — AI. Я его «обучал» ходить более менее правильно в несколько этапов… Сначала, AI ставил свой значок на первой свободной клетке, которую находил. Немного потестировав, мне стало понятно, что это не интересно. Оно работает, но что-то тут не так. Поразмыслив, что лучше случай, чем такое, я прикрутил rand. После этого, стало чуточку по веселее, но все равно — не интересно.

Так, ладно, пусть сначала найдет все клетки, в которые можно(и нужно) сходить. То есть, что-то подобное(выделены синим).



Эти "нужные" клетки определяются по такому алгоритму"
Тут вся информация о игровом поле(что на нем происходит) содержится в двумерном глобальном массиве, значения элементов которого которого, показывают состояния клеток. Используется полный набор направлений, то есть проверяются все соседние клетки с данной. В массив_2 записываются результаты поиска «нужных» клеток.






Так, определили и что дальше с ними делать? Можно в любую из этих клеток ставить рандомно элемент. А можно и назначить каждой клетки оценки и на их основе выбрать наиболее лучший вариант, а затем его использовать. Звучит хорошо. Но, сначала надо решить другой вопрос.

При ходе AI за нолики, может возникнуть ситуация, что «нужных» клеток просто не будет. Например, при первом ходе раунда. Теперь надо придумать алгоритм по нахождению лучшего варианта в этой ситуации(или когда нет свободных клеток у крестиков или ноликов). И я считаю, что хорошо ходить туда, где наиболее просторно.

Поэтому тут реализован такой алгоритм
В м_отрезки записываются промежуточные данные, то есть ряды свободных клеток(вертикальных и горизонтальных) в определенном формате. В объект о_координата будет записан результат работы данной функции. Если отрезок является диаметром «пустого» квадрата, то это означает, что его центральная точка(клетка) — это центр квадрата свободных клеток, при том его стороны равны этому отрезку.






И настало время алгоритму, который выбирает ход на основе оценок.

Вот он


На вход этого алгоритма подается массив с «нужными» точками. Массив м_оценок, вспомогательный и суда записываются оценки клеток. Здесь, как и в предыдущем примере, используется полный перебор всех направлений вокруг клетки. Оценка осуществляется по двум параметрам: тип хода(блокирование или дополнение своего ряда) и длина линии элементов(1, 2, 3 или 4 клетки). Назначение происходит специальной функцией, где можно менять критерии. Эти оценки(критерии) суммируются по всем направлениям для данной клетки.






Заключение



Ну в итоге у меня у меня получилась небольшая игра с AI, который может обыгрывать новичков. Я его без труда выигрываю, не «в сухую», конечно, но все же. Стоит отметить, что когда играешь за «крестики», то как бы уровень сложности пониже, а вот за «ноликов» играть немного посложнее.

Режим нескольких раундов сделал задачу поинтереснее. Например, тут AI должен находить оптимальную клетку для превого хода. Еще возникла проблема с тем, что одиночные пустые клетки(в которых ходить бессмысленно), необходимо тоже было как-то «заштриховывать». Но, в конце концов я с этим справился.

GitHub

This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


[Перевод] Куки-бомбы или как положить интернеты


сегодня в 21:53


Знаете ли вы что субдомен sub.host.com может ставить куки для *.host.com? Наверняка да.

А как много он может их поставить? Очень много.

А сколько браузер будет отправлять их впоследствии? Все!

А что получится если «заспамить» главный домен своими куки бомбами? На всей системе .host.com все запросы будут иметь супер длинный хедер Cookies добавленный браузером и эти запросы не будут обрабатываться сервером из за слишком большого размера.


Попросту говоря после посещения специальной страницы вы не сможете заходить например на такие сайты: *.wordpress.com, *.github.io, ваша экосистема Гугла сломается тк я заспамлю .googleusercontent, Dropboxusercontent, а также не забываем про Content Delivery Network — заспамив главный домен JS и стили на куче других сайтов перестанут подгружаться!


Более того, вы можете «заспамить» конкретный /dontlike путь, например пост конкурента.


За более подробной информации читайте первоисточник. Также предлагаю обсудить как исправить эту проблему.





Свежий взгляд

на бег


протестируй кроссовки

нового поколения




Developers, stick with Russians – work in London




Переводы с

карты на карту


Переводы

через QR-Код


Новая функция

«Мой контроль»




Возьми Lumia 925 на тест-драйв сейчас.




Впечатляющие возможности

в стильном тонком корпусе из металла




Boomburum

исследует LTE


Эволюция средств связи

в путешествии по России




Проблемы коммуникации внутри бизнеса?



Смотри бесплатные курсы

и выиграй Xbox




Нет времени

на счета?


MasterCard

Mobile




Стань

первоиспытателем!


Скачай Windows Server 2012 R2

и выиграй почетную футболку!


Скачать



Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Основы Scala. 5 часов поедания мозгов

Добрый день, уважаемое хабрасообщество!image

В конце ноября 2013 года мы с коллегой устроили встречу, на которой провели сеанс «интенсивного введения Scala в мозг добровольцев».


Выкладываю на суд общественности наше творчество и краткое описание «эксперимента».


Отказ от отвественности и Крик о помощи




Мы не являемся Scala-экспертами, но являемся практикующими специалистами.

Поэтому некоторые концепции мы можем обрисовывать неправильно.

Злого умысла в этом нет, errare humanum est.


Если вы видите неувязочку или уличили нас во лжи — оставьте комментарий к статье и разъясните нам, как жестко мы ошиблись. Я буду крайне за это благодарен!



TL;DR;




Все получилось. Нам понравилось. Людям понравилось. Смотрите и комментируйте.

Часть 1:Введение. Иммутабельность. «Строительные блоки». Основные типы. Иерархия классов.


Часть 2:Функции, методы. Функции как первородные объекты. Вывод типов. Замыкания. Коллекции. Циклы и for compehension. Сопоставление с образцом. Неявные конструкции.


Часть 3:Синтаксический сахар. Ленивые вычисления. Рекурсия. Streams. Монады.


Презентацию можно найти тут.


Отчет для представителей доLTDRной эры




Социальная часть



Итак, основной целью нашего выступления были следующие вещи:


  1. Повысить ЧСВ. Показать, что Scala не так страшна, как ее малюют.

  2. Продемонстрировать наличие крутых концепций, о которых многие вообще не думали.

  3. Задать вектор «кудаДальшеКопания».

  4. Подсадить на тяжелый наркотик Scala… ???… PROFIT!!




Проанализировав отзывы и пронаблюдав «подопытных» в естественной среде, мы пришли в к выводу, что большая часть наших целей выполнена! Ура!

Краткая примерная статистика:



  • Зарегестрировалось около 130 участников.

  • Пришло около 90 участников.

  • До конца дожило около 40 участников.

  • Письменные отзывы прямо на месте оставило 15 участников.

  • Численность участников чатика Scala.UA выросла на 8 человек.




В ходе выступления мы рассмотрели практически все темы, необходимые для уровней A1, A2 и L1 из классификации скала-программистов.

К тому же мы испробовали интерактивный формат выступления:



  • Любой участник задает вопрос в любой момент выступления

  • Лайфкодинг, в ходе которого любой участник может предложить изменение




Апарт №1
Я лично очень люблю форматы, поддерживающие живое общение с аудиторией, потому что они не дают отклониться от темы, уйти в «сложный язык» или перескочить на уровень непонятных аудитории абстракций.

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

К тому же, есть некий психологический дискомфорт, когда у человека появляется вопрос, необходимый для формирования концепции, а он не может его тут же прояснить.

Слушатель все же должен сформировать гештальт как можно быстрее.






Теоретическая часть



Апарт №2
Главная проблема при рассказе про Scala — правильная структура и последовательность материала.

Мы прочитали ряд книжек, просмотрели ряд выступлений, прошли курс на курсере.

Скала сложна только потому, что при ее изучении человек утыкается в неизвестное в каждой теме, и углубляется в это неизведанное. Но стек в человеческом мозгу очень даже конечен, что приводит к «переполнению мозгового стека» при изучении Scala у неподготовленных адептов.






Мы попытались структурировать материал немного иначе, чем принято его подавать, чтобы оградить людей от «концентрированных знаний» в самом начале.

Наш список основных тем выглядит примерно так:



  • Introduction

  • Immutability

  • Building blocks

  • Basic types

  • Class hierarchy

  • Functions. Methods. First-class functions

  • Type inference

  • Closures

  • Collections

  • Loops. For comprehension.

  • Pattern matching.

  • Implicits

  • Scala syntax sugar




Ряд дополнительных тем «вшит» в само выступление и разъясняется по мере того, как аудитория этих тем касается.

Пересматривая наше выступление, мы обнаружили несколько концептуальных неточностей и дыр в понимании.

Но даже сразу по ходу выступления мы сделали вывод, что допустили стратегический промах — мы вынесли весь синтаксический сахар в конец.


Так делать нельзя!

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

Как правильно показать и разъяснить сахар по мере выступления — вопрос открытый.






Спасибо за внимание и конструктивную критику.

Приглашаем всех желающих в наш скайп-чат: bit.ly/scalaua.

Будем рады как новичкам, так и экспертам. Место проживания, раса, пол, и прочие малозначительные факторы значения не имеют.

This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


[Из песочницы] Проблемы прогнозирования финансовых рынков

image

Благодаря стремительному развитию информационных технологий, появилась возможность за считанные секунды проводить анализ большого объёма информации, строить сложные математические модели, решать задачи многокритериальной оптимизации. Учёные, занимающиеся вопросами циклического развития экономики, стали разрабатывать теории, полагая, что отслеживание тенденций ряда экономических переменных позволит прояснить и предсказать периоды подъёма и спада. Одним из объектов для изучения был выбран фондовый рынок. Предпринимались многократные попытки построить такую математическую модель, которая успешно бы решала задачу прогнозирования приращения цены акций. В частности, широкое распространение получил «технический анализ».



Технический анализ (тех. анализ) – это совокупность методик исследования динамики рынка, чаще всего посредством графиков, с целью прогнозирования будущего направления движения цен. На сегодняшний день, данный аналитический метод является одним из самых популярных. Но можно ли считать тех. анализ пригодным для генерации прибыли? Для начала рассмотрим теории ценообразования на фондовом рынке.


Одной из базовых концепций начиная с 1960-х гг. считается гипотеза эффективного рынка (efficient market hypothesis, EMH), согласно которой, информация о ценах и объёмах купли-продажи за прошедший период общедоступна. Следовательно, любые данные, которые можно было когда-либо извлечь из анализа прошлых котировок, уже нашли своё отражение в цене акций. Когда трейдеры конкурируют между собой за более успешное использование этих общедоступных знаний, они обязательно приводят цены к уровням, при которых ожидаемые ставки доходности полностью соответствуют риску. На этих уровнях невозможно говорить о том, является ли покупка акций хорошей или плохой сделкой, т.е. текущая цена объективна, а это означает, что ожидать получения сверх рыночной доходности не приходится. Таким образом, на эффективном рынке, цены активов отражают их истинные стоимости, а проведение тех. анализа теряет всяческий смысл.


Но следует отметить тот факт, что на сегодняшний день ни один из существующих фондовых рынков в мире не может быть назван полностью информационно эффективным. Более того, принимая во внимание современные эмпирические исследования, можно сделать вывод, что теория эффективного рынка является скорее утопией, т.к. не способна в полной мере рационально объяснить реальные процессы, протекающие на финансовых рынках.


image


В частности, профессором Йельского университета Робертом Шиллером был обнаружен феномен, который он в последующем назвал чрезмерной изменчивостью цен фондовых активов. Суть феномена заключается в частом изменении котировок, которое не поддаётся рациональному объяснению, а именно, отсутствует возможность интерпретировать данное явление соответствующими изменениями в фундаментальных факторах.


В конце 1980-х гг. были сделаны первые шаги к созданию модели, которая в отличие от концепции эффективного рынка, позволила бы точнее объяснить реальное поведение фондовых рынков. В 1986 г. Фишер Блэк в своей публикации вводит новый термин – «шумовая торговля».


image

«Шумовая торговля – это торговля на шуме, воспринимаемом так, как если бы шум был бы информацией. Люди, торгующие на шуме, будут торговать даже тогда, когда объективно они должны были бы воздерживаться от этого. Возможно, они считают, что шум, на основе которого они торгуют, является информацией. Или, возможно, им просто нравится торговать». Хотя Ф. Блэк не указывает, каких операторов следует относить к категории «шумовых трейдеров», в работе Де Лонга, Шляйфера, Саммерса и Вальдмана можно найти описание таких участников рынка. Шумовые трейдеры ошибочно полагают, что у них есть уникальная информация о будущих ценах на активы. Источниками такой информации могут быть ложные сигналы о несуществующих трендах, подаваемые индикаторами тех. анализа, слухи, рекомендации финансовых «гуру». Шумовые трейдеры сильно переоценивают значение имеющейся информации и готовы принимать на себя необоснованно большой риск. Проведённые эмпирические исследования также указывают на то, что к шумовым трейдерам в первую очередь следует отнести индивидуальных инвесторов, т.е. физических лиц. Более того, именно эта группа трейдеров несёт систематические убытки от торговли из-за иррациональности своих действий. Для западных фондовых рынков эмпирическое подтверждение этого явления можно найти в исследованиях Барбера и Одина, а для операторов российского фондового рынка – в работе И.С. Нилова. Теория шумовой торговли позволяет объяснить и феномен Р. Шиллера. Именно иррациональные действия трейдеров вызывают чрезмерную изменчивость цен.


Обобщая современные исследования в области теорий ценообразования на фондовом рынке, можно сделать вывод о неэффективности использования технического анализа для получения прибыли. Более того, трейдеры, использующие тех. анализ пытаются выделять повторяющиеся графические паттерны (от англ. pattern — модель, образец). Стремление найти различные модели поведения цен является очень сильным, а способность человеческого глаза выделять очевидные тренды удивительна. Однако выделенные закономерности могут вовсе не существовать. На графике представлены смоделированные и фактические данные индекса Dow Jones Industrial Average на протяжении 1956 года, взятые из исследования Гарри Робертса.


image


График (B) представляет собой классическую модель «голова-плечи». График (А) также выглядит как «типичная» схема поведения рынка. Какой из двух графиков построен на основе фактических значений биржевого индекса, а какой – с помощью смоделированных данных? График (А) построен на основе фактических данных. График (B) создан с помощью значений, выданных генератором случайных чисел. Проблема, связанная с выявлением моделей там, где их на самом деле не существует, заключается в отсутствии необходимых данных. Анализируя предыдущую динамику, всегда можно выявить схемы и методы торговли, которые могли дать прибыль. Иными словами, существует совокупность бесконечного количества стратегий основанных на тех. анализе. Часть стратегий из общей совокупности демонстрируют на исторических данных положительный результат, другие – отрицательный. Но в будущем, мы не можем знать, какая группа систем позволит стабильно получать прибыль.


Также, одним из способов определения наличия закономерностей во временных рядах, является измерение сериальной корреляции. Существование сериальной корреляции в котировках, может свидетельствовать об определенной взаимосвязи между прошлой и текущей доходностью акций. Положительная сериальная корреляция означает, что положительные ставки доходности, как правило, сопровождаются положительными ставками (свойство инерционности). Отрицательная сериальная корреляция означает, что положительные ставки доходности, сопровождаются отрицательными ставками (свойство реверсии или свойство «коррекции»). Применяя данный метод к биржевым котировкам, Кендалл и Робертс (Kendall and Roberts, 1959), доказали, что закономерностей обнаружить не удаётся.


Наряду с техническим анализом, достаточно широкое распространение получил фундаментальный анализ. Его цель – анализ стоимости акций, опирающийся на такие факторы, как перспективы получения прибыли и дивидендов, ожидания будущих процентных ставок и риск фирмы. Но, как и в случае технического анализа, если все аналитики полагаются на общедоступную информацию о прибылях компании и её положении в отрасли, то трудно ожидать, что оценка перспектив, полученная каким-то одним аналитиком, намного точнее оценок других специалистов. Подобные исследования рынка выполняются множеством хорошо информированных и щедро финансируемых фирм. Учитывая столь жёсткую конкуренцию, трудно отыскать данные, которыми ещё не располагают другие аналитики. Следовательно, если информация о конкретной компании общедоступна, то ставка доходности, на которую сможет рассчитывать инвестор, будет самой обычной.


Помимо вышеописанных методов, для прогнозирования рынка пытаются применять нейронные сети, генетические алгоритмы и т.д. Но попытка использовать прогностические методы применительно к финансовым рынкам превращает их в самоликвидирующиеся модели. Например, предположим, что с помощью одного из методов спрогнозирована базовая тенденция роста рынка. Если теория широко признана, многие инвесторы сразу же начнут скупать акции в ожидании роста цен. В результате, рост окажется намного резче и стремительнее, чем это предсказывалось. Или же рост может вообще не состояться из-за того, что крупный институциональный участник, обнаружив чрезмерную ликвидность, начнёт распродавать свои активы.


Самоликвидация прогностических моделей возникает из-за применения их в конкурентной среде, а именно в среде, в которой каждый агент старается извлечь собственную выгоду, определённым образом влияя на систему в целом. Влияние отдельного агента на всю систему не значительно (на достаточно развитом рынке), однако наличие эффекта суперпозиции провоцирует самоликвидацию конкретной модели. Т.е. если в основе торгового алгоритма лежат прогностические методы, стратегия приобретает свойство неустойчивости, а в долгосрочной перспективе происходит самоликвидация модели. Если же стратегия является параметрической и прогностически нейтральной, то это обеспечивает конкурентное преимущество по сравнению с торговыми системами, в которых для принятия решения используется прогноз. Но стоит учитывать, что поиск стратегий, удовлетворяющих таким параметрам как, например, прибыль/риск происходит одновременно с поиском подобных систем другими трейдерами и крупными финансовыми компаниями на основе одних и тех же исторических данных и практически по одним и тем же критериям. Из этого следует необходимость использовать системы, основанные не только на общепринятых основных параметрах, но и на таких показателях, как надежность, стабильность, живучесть, гетероскедастичность и т. д. Особый интерес представляют торговые стратегии, базирующиеся на так называемых «дополнительных информационных измерениях». Они проявляются в других, обычно смежных областях деятельности и по разным причинам редко используются широким кругом лиц на рынке акций.


Вышеизложенные рассуждения позволяют сделать следующие выводы:



  1. Теория шумовой торговли, в отличие от концепции эффективного рынка, позволяет более точно объяснить реальное поведение фондовых активов.

  2. В изменениях котировок торговых инструментов отсутствует закономерность, т.е. рынок предсказать невозможно.

  3. Применение прогностических методов, в частности технического анализа, приводит к неизбежному разорению трейдера в среднесрочной перспективе.

  4. Для успешной торговли на фондовом рынке, необходимо применять прогностически нейтральные стратегии, базирующиеся на «дополнительных информационных измерениях».


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Вся правда о неймспейсах в yii1

Введение




Всем привет, эта статья лежит у меня в черновиках уже год. Я все откладывал её на потом, когда будет побольше времени, но, в связи с скорым выходом yii2, я решил доработать её и выложить на обозрение читателя.

Вот уже как 3 года я работаю над одним очень крупным проектом в megaflowers. И, в какой-то момент разработки, когда классов стало слишком много, а их названия стали вида ContentDiscount, ItemDiscount, я понял, что надо с этим что-то делать, и решил ввести неймспейсы в наш проект. Ну, как говорится, гулять так гулять если вводить, то везде сразу, а не там чуть-чуть и там, а в остальных местах нет.



Итак, давайте рассмотрим как «готовить» основные типы классов в приложении.


Основы




Так как я решил использовать везде неймспейсы, то я выбрал корневым неймспейсом app (ну уж слишком длинный application). Однако yii его не понимает, поэтому пришлось определить его в конфиге(можно и в index.php), но, так как конфиг подключался по пути к нему, и, в момент инициализации не смог использовать Yii::setPathOfAlias (может сейчас ситуация изменилась?), то пришлось видоизменить index.php.
Вот так стал выглядеть мой index.php


$yii=dirname(__FILE__).'/yii/framework/yii.php';
$config=dirname(__FILE__).'/protected/config/main.php';
// remove the following lines when in production mode
defined('YII_DEBUG') or define('YII_DEBUG',true);
// specify how many levels of call stack should be shown in each log message
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
// Вначале подключаем Yii, чтоб можно было воспользоваться автолоадером
require_once($yii);
// Затем, подключаем конфиг, иначе мы не сможем установить альяс
$config=require($config);
Yii::createWebApplication($config)->run();







И соответственно конфиг


// Из-за глюка в yii, мы не можем использовать Yii::getPathOfAlias
Yii::setPathOfAlias('app', dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR);
// а так же констануту для удобства
define(NS_SEPARATOR,NAMESPACE_SEPARATOR);
// сам конфиг
return array(
// ....
);





Контроллеры




Казалось бы тут все должно быть просто — указал controllerNamespace в конфиге, например наш альяс app, и все работает хорошо. А вот и нет! До поры, до времени и валится все это в случае когда контроллер лежит в какой-то папке, например, test и в неймспейсе app\test. Yii ищет его в папке test, но в неймспейсе app. Так как работать надо, а времени писать баг-репорт и делать пул-реквест не было (но вы можете это сделать), то я решил написать своё решение. Для этого я унаследовался от CWepApplication и переопределил метод createController. Вышло не совсем красиво, так как пришлось дублировать уйму кода, но, мне все равно надо было этот метод перекрыть для решения внутренних задач проекта.
WepApplication


class WebApplication extends CWebApplication {
// неймспейс для контроллеров чтоб не писать в конфиге
public $controllerNamespace='app';
public function createController($route,$owner=null)
{
if($owner===null)
$owner=$this;

if(($route=trim($route,'/'))==='')
$route=$owner->defaultController;
$caseSensitive=$this->getUrlManager()->caseSensitive;

$route.='/';
while(($pos=strpos($route,'/'))!==false)
{
$id=substr($route,0,$pos);
if(!preg_match('/^\w+$/',$id))
return null;
if(!$caseSensitive)
$id=strtolower($id);
$route=(string)substr($route,$pos+1);
if(!isset($basePath)) // first segment
{
if(isset($owner->controllerMap[$id]))
{
return array(
\Yii::createComponent($owner->controllerMap[$id],$id,$owner===$this?null:$owner),
$this->parseActionParams($route),
);
}
/** @var $module \base\BaseModule */
if(($module=$owner->getModule($id))!==null){
return $this->createController($route,$module);
}

$basePath=$owner->getControllerPath();
$controllerID='';
}
else
$controllerID.='/';

$className=ucfirst($id).'Controller';
$classFile=$basePath.DIRECTORY_SEPARATOR.$className.'.php';

// только здесь логика меняется
if($owner->controllerNamespace!==null)
$className=$owner->controllerNamespace.NS_SEPARATOR.str_replace('/',NS_SEPARATOR,$controllerID).$className;

if(is_file($classFile))
{
if(!class_exists($className,false))
require($classFile);
if(class_exists($className,false) && is_subclass_of($className,'CController'))
{
$id[0]=strtolower($id[0]);
return array(
new $className($controllerID.$id,$owner===$this?null:$owner),
$this->parseActionParams($route),
);
}
return null;
}

$controllerID.=$id;
$basePath.=DIRECTORY_SEPARATOR.$id;
}
}
}








А вот так стал выглядеть наш index.php:


// change the following paths if necessary
$yii=dirname(__FILE__).'/yii/framework/yii.php';
$config=dirname(__FILE__).'/protected/config/main.php';
// remove the following lines when in production mode
defined('YII_DEBUG') or define('YII_DEBUG',true);
// specify how many levels of call stack should be shown in each log message
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
// Вначале подключаем Yii, чтоб можно было воспользоваться автолоадером
require_once($yii);
// Затем, подключаем конфиг
$config=require($config);
// И, запускаем приложение
$app=new app\components\WebApplication($config);
$app->run();





Модули




Контролеры у нас уже есть, можно писать дальше, но что делать если мы хотим положить их в модули? Модуль определяется конфигом для Yii::createComponent, то есть его можно использовать, указав вручную имя класса.
конфиг


array(
'modules'=>array(
'front'=>array(
'class'=>'front\FrontModule'
)
)
)








Такой способ не сработает, так как yii ничего не знает про альяс front. Можно по тому же принципу, что и для альяса app, прописать его в конфиге, но мне такой способ не очень понравился в виду избыточности писанины кода (хотелось писать только имена модулей), поэтому я поступил проще и изменил своего потомка CWebApplication.
WebApplication


class WebApplication extends CWebApplication {
// ....

/**
* Принудительно ставит неймспейс для модулей с дефолтным описанием(кратким, без массива)
* @param array $modules
*/
public function setModules($modules)
{
$modulesConfig=array();
foreach($modules as $id=>$module){
if(is_int($id))
{
$id=$module;
$module=array();
}
if(!isset($module['class']))
{
// ставим альяс
\Yii::setPathOfAlias($id,$this->getModulePath().DIRECTORY_SEPARATOR.$id);
$module['class']=NS_SEPARATOR.$id.NS_SEPARATOR.ucfirst($id).'Module';
}
$modulesConfig[$id]=$module;
}
parent::setModules($modulesConfig);
}
}








Решение не идеально, да и баг-репорт бы составить (почему, указывая имя класса модуля, yii не может его найти? приходится писать его вида app.modules.ModuleClass). Сейчас же я думаю, все это делать поменять и поменьше трогать CWebApplication, например, вынести в конфиг в папке с модулем установку альяса и подключать его к основному конфигу.

С модулями мы разобрались, но, как только дело дойдет до подмодулей, то мы столкнемся с той же проблемой. Да и, для корректной работы контроллеров в модуле, нужно вручную для каждого модуля указать controllerNamespace. Исправим это, определив базовый класс для всех модулей.


BaseModule


class BaseModule extends \CWebModule
{
/**
* Фикс для неймспейсов + импорт
*/
protected function init()
{
parent::init();
// устанавливаем неймспейсы контроллерам, чтоб не прописывать в конфиге
$namespace=implode(NS_SEPARATOR, array_slice(explode(NS_SEPARATOR,get_class($this)),0,-1));
$this->controllerNamespace=$namespace.NS_SEPARATOR.'controllers';
}

/**
* Принудительно ставит неймспейс для модулей с дефолтным описанием(кратки, без массива)
* @param array $modules
*/
public function setModules($modules)
{
$modulesConfig=array();
foreach($modules as $id=>$module){
if(is_int($id))
{
$id=$module;
$module=array();
}
if(!isset($module['class']))
{
\Yii::setPathOfAlias($id,$this->getModulePath().DIRECTORY_SEPARATOR.$id);
$module['class']=NS_SEPARATOR.$id.NS_SEPARATOR.ucfirst($id).'Module';
}
$modulesConfig[$id]=$module;
}
parent::setModules($modulesConfig);
}
}








Часть кода можно вынести в трейты, но, я оставлю это вам.

Консольные команды




С первого раза у меня не вышло запустить «неймспейсную» команду, ничего похожего на commandNampespace я не обнаружил ни в `CConsoleApplication`, ни в `CConsoleCommandRunner` (может стоит запрос о фиче написать?). Стал копать в сторону commandMap, но и тут меня ждало разочарование.
конфиг console.php


// нужен абсолютный путь, иначе альяс будет ссылаться не туда
Yii::setPathOfAlias('app',dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR);
//...
'commandMap'=>array(
'import'=>'\app\commands\ImportCommand',
),








Код валился ругаясь на на то что не может найти класс ImportCom.

Методом проб и ошибок все же было найдено рабочее решение.


console.php
:

// нужен абсолютный путь, иначе альяс будет ссылаться не туда
Yii::setPathOfAlias('app',dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR);
//...
'commandMap'=>array(
// наша команда
'import'=>array(
'class'=>'\app\commands\ImportCommand',
)
),








Из минусов этого способа можно отметить необходимость указания в конфиге абсолютного имени для всех команд.

На сегодняшний день это единственное решение проблемы, других мне обнаружить не удалось.


Модели




Вот мы и добрались до моделей. Казалось бы тут все просто должно быть, ведь модели и так можно использовать в неймспейсах, но, когда я увидел как стал выглядеть метод relations, я решил это исправить. Сперва я определял в каждой модели константу с именем класса: const CLASS_NAME=__CLASS_NAME__;.

Потом решил поступить проще, определив базовую модель(решение подсмотрено в yii2).


Базовая модель NamespaceRecord


class NamespaceRecord extends CActiveRecord
{
public static function className()
{
return get_called_class();
}
}





После этих действиях наши модели стали проще и «красивее».


Было:


public function relations(){
return array(
'country'=>'app\location\Country',
)
}








Стало:


public function relations(){
return array(
'country'=>Country::className(),
)
}








Были еще проблемы с формами, но, в yii уже исправили это.

Виджеты




Долгое время я писал в своих вьюхах $this->widget('Мой длиный неймспейс виджета\имя класса'), однако, с выходом yii2, я сделал свои виджеты более похожими на yii2. Для этого я определил базовый класс для всех виджетов.
Базовый виджет NSWidget


class NSWidget extends \CWidget{
/**
* @param array $options
* @return \CWidget
*/
public static function begin($options=array())
{
return \Yii::app()->controller->beginWidget(get_called_class(),$options);
}

/**
* @return \CWidget
*/
public static function end()
{
return \Yii::app()->controller->endWidget();
}

/**
* @param array $options
* @return string widget content
*/
public static function runWidget($options=array())
{
return \Yii::app()->controller->widget(get_called_class(),$options,true);
}
}






Все, теперь мы можем писать во вьюхах


echo MyWidgetNS\MyWidget::begin($options);
echo MyWidgetNS\MyWidget::end();
//...
echo MyWidget2NS\MyWidget2::runWidget($options);








На этом все, если у вас будут какие-то замечания иди предложения по статье — пишите, поправлю.

This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Как математика помогает зарабатывать? Лекция для малого ШАДа Яндекса

Яндекс зарабатывает сотни миллионов долларов в год, хотя наш поиск — бесплатный. Основной доход мы получаем от рекламы, соединяя продавцов с покупателями. Чтобы делать это хорошо, мы используем сложные алгоритмы, созданные на основе математической статистики, теории вероятностей, машинного обучения, теории игр и теории аукционов. Улучшение алгоритмов всего на несколько процентов — это дополнительные десятки миллионов долларов в год. Из этой лекции вы узнаете, как математика может работать в рекламе.

Видео лекции



За что платят рекламодатели?




Существует несколько вариантов оплаты размещения рекламных объявлений в интернете. Самая простая и выгодная модель для рекламной площадки – это CPM (cost-per-mille – оплата за тысячу показов). Она подразумевает, что оплата происходит исключительно за показы объявлений на страницах поисковой выдачи. При этом площадка не отвечает за то, насколько хорошо была таргетирована реклама, понравилась ли она пользователям, и принесла ли какую-нибудь прибыль рекламодателю. Соответственно, для рекламодателя такая модель не очень выгодна, и особой популярностью не пользуется.

Другая модель – CPA (cost-per-action). Она подразумевает, что рекламодатель производит оплату только в случае, если он добился желаемого результат результата, например, продажи товара или услуги.


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


Третья модель – PPC (pay-per-click), оплата за клики. Можно сказать, что это некоторая золотая середина, одинаково выгодная как площадке, так и рекламодателю. Рекламодатель может быть уверен, что его объявления будут демонстрироваться пользователям, которые потенциально могут ими заинтересоваться, а площадка избегает трудностей с фиксацией конверсии. Именно эта модель в основном применяется в Яндексе.


Как отбирать рекламу?




В Яндексе основное таргетирование рекламы производится на основе запроса пользователя. Допустим, пользователь ввел запрос [пластиковые окна в ростове]. При подаче объявления рекламодатели указывают, по каким ключевым словам в запросе они хотели бы его показывать, а по каким – нет. Но даже в этом случае может оказаться, что кандидатов на показ слишком много, из числа которых нужно отобрать наиболее подходящих.

Что лучше показать?




Допустим, у нас на странице выдачи есть одно рекламное место. На основе запроса мы составили список кандидатов на показ и отобрали из них три лучших объявления. Первое демонстрировалось уже 1000 раз, и набрало 100 кликов. Второе показывалось 500 раз и также собрало 100 кликов. А на третье кликнули 300 раз за 10 000 показов. Если мы оценим вероятность кликов, то она составит 10%, 20% и 3% для каждого из объявлений соответственно. Очевидно, что наиболее эффективно по введенному пользователем запросу второе объявление. Т.е. при условии, что все три рекламодателя платят за клик одну и ту же сумму, то показывать второе объявление будет выгоднее всего.

Но ставка за клик может быть разная. Предположим, что первый рекламодатель установил оплату за клик в $0,3, второй $0,1, а третий $2. В этом случае выгодность размещения каждого из объявлений меняется. Умножив вероятность клика на ставку, мы получим следующие суммы: за 1000 показов первого объявления площадка заработает $30, второго $20 и третьего — $60. Соответственно, показ третьего объявления становится более выгодным. Это сильно упрощенная модель, но она позволяет понять, как все и работает.


Сколько списать?




Как же определить, сколько денег брать за клик? Ведь прибыль от него для каждого рекламодателя может быть разной. Наиболее очевидный вариант – устроить аукцион, тогда станет ясно, сколько готовы платить рекламодатели за демонстрацию объявления по запросу с теми или иными ключевыми словами. Однако обычный аукцион, в котором соревнующиеся повышают цену и в итоге, предложивший наибольшую, платит именно ее, из-за некоторых особенностей системы оказывается невыгоден обеим сторонам. Поэтому используется аукцион второй цены, где также выигрывает предложивший наивысшую цену, но платин он столько, сколько предложил предыдущий участник.

Обычно рекламодатель примерно представляет, какую ценность для него составляет каждый клик по объявлению. Если мы примем ценность клика за v, а ставку – за b, то b всегда должно быть больше или равно v, так как иначе никакой выгоды рекламодателю клик не принесет. Наиболее выгодной стратегией для рекламодателей в таком аукционе является честное выставление значения b равным значению v. Это нетрудно доказать при помощи теории аукционов.


Допустим, за размещение объявления на одном из рекламных мест соревнуются два рекламодателя. Один из них делает ставку b, а второй – ставку b’. Цену, которую будет платить в итоге победитель, обозначим как c, и она будет определенно меньше, чем установленное им значение b, т.к. ее значение берется из ставки проигравшего участника. Прибыль победителя (обозначим ее s) можно посчитать по формуле s = p(v — c), где p – это вероятность клика по объявлению при его показе. Теперь докажем, что выгоднее всего устанавливать b равным v. Что ставить b > v рекламодателю невыгодно изначально мы уже определили, так что рассмотрим варианты развития событий при b < v. Если b’ окажется больше v, то участник, поставивший b, проигрывает и никакой прибыли не получает. Возможности выиграть у участника со ставкой b в этом случае просто нет, так как b не может быть больше v.


А если b’ меньше v, но больше b, то первый участник снова проигрывает, хотя возможность выиграть у него была, поставь он b равным v. Если же b будет больше b’, но меньше v, то все равно будет c равно b’, как и если бы b было равно v. Таким образом, при b < v вероятность выиграть аукцион меньше, а итоговая цена в результате выигрыша все равно будет равна b’.


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


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


[Из песочницы] Быстрый вывод графиков в Матлабе

Автор хочет поделится своим опытом организации быстрой перерисовки графиков (точнее сказать, изображений,) в Матлабе на примере организации радиолокационного индикатора кругового обзора (ИКО, он же в англоязычной литературе PPI).

Суть в том, что в том же Матлабе был написан имитатор радиолокационного сигнала, отправлявшего данные по сети. И, с другой стороны, для проверки, подключалась машинка с Матлабом, которая принимал данные по сети и отображала их на ИКО-подобном индикаторе. Даже те, кто далёк от радиолокационной тематики, наверняка видели ИКО хотя бы в фильмах. В Матлабе эта штука выглядит так:

image


Угловой ползунок изображает положение луча антенны РЛС. У реальной РЛС антенна делала полный оборот за 4-6 секунд и была поставлена задача добиться скорости отображения максимально близкой к real-time.

Но как выводить такое изображение на график? Использовать оператор Матлаба polar? Не реально, скорость вывода будет просто черепашьей.

В начале была предпринята попытка вывести на экран изображение с помощью стандартных средств Matlab'а: указаний image (ну, или, imagesc). Результат был печален: image позволял сделать один полный оборот на экране минуты за 2, т.е. раз в 20 медленнее требуемого.


Но выход из положения был найден. Оказалось, что есть многократно более быстрый способ вывода изображения на экран. Для этого команда image даётся только один раз и ссылка на неё запоминается



h = image(...



Далее — создаётся матрица — копия изображения. Начальную загрузку этой матрицы можно сделать из свойств объекта h например так:

ImageMatrix = get(h,'CData');



Выполняются необходимые расчёты и внесение изменений в матрицу ImageMatrix. После чего новая матрица выводится на экран командами

set(h,'CData',ImageMatrix); drawnow;



Такой вывод минимум на порядок (а реально — больше) быстрее, чем когда каждый раз вызывают команду image.

Для того, что бы не перерисовывать разметку и бегунок (тем более, что использовалась палитра gray, так что было бы проблематично их нарисовать цветными) линии, дальностные окружности, угловой бегунок и цифры рисовались командами line, text, ellipse и т.д. Единственная проблема, которая при этом возникала — пересчёт координат (график и линии, увы, живут в разных мирах в Матлабе). Причём, т.к. было очень лень не было времени досконально разбираться с этими перерасчётами делалось так: включив меню «Annotation», элементы разметки рисовались от руки и переносились в код автоматически. В результате есть некоторые неточности: на картинке видно, что начало углового бегунка слегка не попадает в центр ИКО.

В конечном итоге на машине с процессором i7, 16Гбайт ОЗУ и видеокартой GeForce 690 при применении CUDA-возможностей видеокарты программа укладывалась в real-time, даже несмотря на использование объектно-ориентированного стиля программирования в Матлабе. Это позволило избежать утомительного этапа переноса программы из Матлаба на C/C++ или Delphi.

Надеюсь, этот приём кому-нибудь пригодится.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


CorelCAD 2014: Обзор продукта. ч.II

Ключевые особенности CorelCAD™ 2014




CorelCAD 2014 помогает работать продуктивнее благодаря встроенной поддержке файлов .DWG, стандартным для отрасли функциям САПР, настраиваемым инструментам двух- и трехмерного проектирования, а также совместимости с различными форматами. Решение CorelCAD оптимизировано как для Windows, так и для Mac OS и отличается впечатляющей скоростью, производительностью и адаптируемостью на любой из платформ.
Открытие и сохранение файлов .DWG



Все решения САПР позволяют работать с файлами AutoCAD® .DWG, но многие из них имеют и свои собственные форматы. При преобразовании таких файлов в формат .DWG и наоборот важные части чертежа могут быть потеряны или искажены. А некоторые приложения САПР не в состоянии открыть файлы проприетарных форматов сторонних разработчиков. В CorelCAD 2014 в качестве основного формата чертежей используется .DWG, что избавляет от проблем при совместной работе.

Многие решения САПР и файлы их проприетарных форматов содержат элементы, которые не поддерживаются в формате .DWG. И наоборот, в AutoCAD есть функции, которые не поддерживаются некоторыми приложениями, что может стать причиной нежелательных и несвоевременных затруднений во время преобразования файлов. CorelCAD 2014 обрабатывает атрибуты файлов, относящиеся к неподдерживаемым функциям AutoCAD, что обеспечивает полную совместимость во время работы с партнерами и заказчиками, использующими формат файлов .DWG.

Решение CorelCAD совместимо с любыми файлами, созданными в AutoCAD версии от R12 до 2013 .DWG. Возможность сохранять чертежи в широко распространенных форматах .DWG и DXF™ версии R12 позволяет и дальше использовать устаревшее оборудование (например, устройство для лазерной гравировки или плоттер), распознающее только эту версию. Кроме того, CorelCAD может быть использован для восстановления поврежденных файлов форматов .DWG и DXF любых версий.


Поддержка AutoCAD® 2013/2014 .DWG: CorelCAD 2014 использует формат R2013 .DWG в качестве собственного формата файлов. Это обеспечивает полную совместимость с другими САПР-приложениями, а также наличие всех необходимых функций и поддержку атрибутов файлов CorelCAD в формате .DWG. Такой уровень поддержки абсолютно необходим в том случае, когда нужно получать и обрабатывать файлы, созданные в AutoCAD 2014 или AutoCAD 2013. Он обеспечивает полную совместимость файлов во время работы с теми заказчиками и партнерами, которые пользуются AutoCAD.

Привычный интерфейс САПР: Тем, кто уже работал с другими популярными приложениями САПР, не понадобится обучение для перехода на CorelCAD; такие пользователи смогут сразу же приступить к работе. Благодаря привычному пользовательскому интерфейсу САПР — включая командную строку — пользователи могут быстро начать работу, используя уже знакомые команды и сочетания клавиш.



Новая возможность! Ленточный интерфейс: CorelCAD 2014 представляет два новых ленточных рабочих пространства, которые были разработаны для повышения эффективности определенных рабочих процессов. Рабочие пространства «3D Modeling» (Трехмерное моделирование) и «Drafting and Annotation» (Проектирование и создание примечаний) организуют инструменты и команды в удобную ленту, что упрощает доступ к возможностям приложения.

Знакомые опции ленточного интерфейса также помогут новым пользователям CorelCAD мигрировать из AutoCAD других САПР-приложений. Кроме того, можно с легкостью импортировать пользовательские файлы рабочего пространства (CUIX) и привязывать инструменты и функции прямо к ленте CorelCAD.



Попробуйте!

Выбор ленточного рабочего пространства

• В CorelCAD 2014 щелкните раскрывающееся меню Classis Default в верхнем левом углу рабочего пространства и выберите одну из опций:

3D Modeling (Трехмерное моделирование)

• Drafting and Annotation (Проектирование и создание примечаний)


Автоматизированные чертежные инструменты: В CorelCAD 2014 есть все автоматизированные чертежные инструменты, которыми должно обладать программное обеспечение САПР. Это решение предоставляет те функциональные возможности, с которыми профессиональные дизайнеры привыкли работать в графических программах. Для ускорения черчения предусмотрены различные режимы объектной привязки, отслеживание объектов и полярные направляющие. Для выравнивания строительной плоскости относительно объектов чертежа можно создавать пользовательские системы координат. Можно также сэкономить время, воспользовавшись функцией «Ручки объекта» для быстрого перемещения, выравнивания, копирования или изменения размеров объектов.



Новая возможность! Быстрое группирование объектов: CorelCAD 2014 предлагает новую команду «Быстро сгруппировать», которая позволяет легко и быстро выполнять группирование чертежных объектов. Нужно просто выделить объекты, которые необходимо сгруппировать, щелкнуть правой кнопкой мыши и выбрать Группа объектов Быстро сгруппировать. Новая возможность! Окно настройки «Ресурсы проектирования»: Новое окно настройки «Ресурсы проектирования» обеспечивает быстрый доступ и возможность повторного использования существующих средств проектирования, таких как блоки, стили размеров, слои, стили линий, внешние чертежи, листы, табличные стили и стили текста. Это окно облегчает задачи поиска и обеспечивает доступ к дизайнерским ресурсам на компьютере и в локальной сети.



Попробуйте!

Работа с окном настройки «Ресурсы проектирования»

1 В классическом рабочем пространстве (Classic Default) CorelCAD 2014 нажмите кнопку Ресурсы проектирования на панели свойств.

В любом рабочем пространстве CorelCAD 2014 можно открыть или закрыть окно настройки «Ресурсы проектирования», нажав клавиши Ctrl+2. Можно также щелкнуть по панели свойств правой кнопкой мыши и выбрать в раскрывающемся меню Ресурсы проектирования.

2 В разделе Папки перейдите в папку, где содержатся файлы .DWG и выберите файл.

3 В разделе Содержимое выберите один из следующих параметров для просмотра средств проектирования:

• Блоки

• Стили размера

• Слои

• Стили линий

• Внешние чертежи

• Листы

• Стили таблицы

• Стили текста

Средства, выбранные в разделе Содержимое, отображаются в области Предварительный просмотр.

4 Щелкните, чтобы вставить компонент в текущий чертеж.

Окно настройки «Свойства»: Это универсальное окно настройки знакомо как дизайнерам, так и проектировщикам. Оно позволяет управлять геометрией и свойствами объектов, в том числе слоями, цветами, стилем линий и их толщиной. При помощи окна настройки «Свойства» можно также легко копировать атрибуты из одного объекта в другой.



Новая возможность! Проверка стандартов САПР: CorelCAD 2014 позволяет легко проверить чертеж и выявить нарушения отраслевых, корпоративных или проектных стандартов. Команда «Проверка стандартов» инспектирует такие параметры текущего чертежа, как свойства слоя, стили линий, размера и текста, на соответствие стандартам наименований из ассоциированного файла чертежных стандартов (DWS). Несоответствующие стандартам элементы можно быстро заменить.



Попробуйте!

Проверка чертежа

1 Для сопоставления файла чертежных стандартов (DWS) щелкните Инструменты — Стандарты — Чертежные стандарты.

2 В диалоговом окне «Параметры» – «Чертежные стандарты» щелкните кнопку Создать .

3 В диалоговом окне «Выбрать файл» перейдите в папку, содержащую файлы чертежных стандартов, выберите один из файлов и щелкните Открыть.

4 Выберите Инструменты — Стандарты — Проверка стандартов.

5 В диалоговом окне «Проверка стандартов» выберите любой элемент, который не соответствует чертежным стандартам.

6 В области Заменить на выберите чертежный стандарт, который соответствует нужному виду, и щелкните Исправить.

Новая возможность! Предварительный просмотр слоя: В CorelCAD 2014 можно быстро и просто просматривать содержимое слоев в сложных САПР- файлах. Это поможет понять структуру слоев чертежа и найти нужный контент.

Попробуйте!

Предварительный просмотр слоев

1 Выберите Формат — Инструменты слоя — Предв. просмотр слоя. В диалоговом окне «Предв. просмотр слоя» отобразится список всех слоев.

2 Щелкните слой для просмотра контента. Можно также щелкнуть, удерживая Ctrl, несколько слоев одновременно для просмотра содержимого этих слоев.

Новая возможность! Поиск в диалоговом окне «Параметры»: Новые возможности диалогового окна «Параметры» в CorelCAD 2014 облегчают задачи поиска нужных настроек, чертежных стилей, свойств файлов чертежей и много другого. Новые возможности поиска также ускоряют процесс настройки приложения, поскольку отпадает необходимость в ручной навигации по различным вкладкам диалогового окна «Параметры». Кроме того, знакомые ключевые слова помогут новым пользователям CorelCAD мгновенно найти нужные инструменты и функции, что облегчает переход из другого приложения.



Попробуйте!

Поиск в диалоговом окне «Параметры»

1 Выберите Инструменты — Параметры.

2 В диалоговом окне «Параметры» введите ключевое слово в поле Найти. Раскрывающееся меню мгновенно отображает результаты настройки параметров. Например, при наборе слова слой будут представлены параметры, относящиеся к слоям.

3 В раскрывающемся меню выберите нужную опцию для доступа к соответствующей команде или настройке.

Новая возможность! Прозрачность слоя: Поддержка формата AutoCAD R2013 .DWG обеспечивает полную визуальную целостность с существующими САПР- файлами. В сложных разработках прозрачность слоя может быть применена для выделения определенного контента или чтобы сделать контент, находящийся под текущим слоем, видимым.

Инструмент «Выровнять видовой экран»: Команда «Выровнять видовой экран» значительно упрощает компоновку элементов чертежа и обеспечивает более точное выравнивание в листах. В CorelCAD 2014 видовые экраны выравниваются в соответствии с внутренней геометрией экрана. Больше не нужно полагаться на догадки при определении точного расположения элементов чертежа.

PDF-основание: Внешние файлы PDF можно использовать в чертеже в качестве PDF-оснований. Можно указывать параметры видимости слоя PDF- основания, обрезать PDF-основание, чтобы отображалась только необходимая его часть, а также откреплять основания от текущего чертежа. CorelCAD 2014 также поддерживает файлы Microstation® DGN в качестве оснований.

Прямое редактирование текста: CorelCAD 2014 позволяет вносить изменения в текст прямо на экране, вместо того, чтобы использовать отдельное диалоговое окно. Инструмент прямого редактирования текста дает возможность модифицировать определения компонентов (определения блоков) или элементы (справочные чертежи). Изменения спецификации компонентов чертежа отображаются в реальном времени. Команда ExplodeX: Эта команда конвертирует эллипсы и сплайны в полилинии. Она особенно полезна при экспорте чертежей в другие приложения или устройства, которые не поддерживают эллипсы и сплайны, например, устаревшие гравировальные станки. Также можно использовать команду «Explode» для разбивки таких сложных объектов, как блоки, на составляющие.


Проектирование в двух- и трехмерном режимах



Помимо полного набора функций для двухмерного проектирования, CorelCAD 2014 включает в себя ряд инструментов для моделирования трехмерных объектов.

Инструменты моделирования трехмерных объектов: С инструментами трехмерного моделирования CorelCAD 2014 обеспечивает возможность работы в трехмерном режиме, который становится все более распространенным. Как и в трехмерных САПР, можно добавлять в проект элементарные объемные фигуры и использовать булевы операции для объединения, пересечения и вычитания тел. Двухмерные объекты можно вытягивать, вращать или перемещать по траектории. Можно создавать трехмерные объекты на основе сечений двухмерных объектов. Кроме того, CorelCAD 2014 дает пользователям возможность выполнять с трехмерными фигурами операции пересечения и деления на сектора, а также изменять их края, грани и тела.


Попробуйте!

Проектирование в трехмерном режиме

1 Выберите в меню пункт Файл — Создать, выберите стандартный шаблон и нажмите кнопку Открыть.

2 В командной строке введите Сфера.

3 Щелкните в графической области, чтобы задать центральную точку и перетащите указатель, чтобы задать радиус.

4 Выберите в меню пункт Вид — Менеджер мозаичных видов.

5 В диалоговом окне «Мозаичные виды» выберите Создать и щелкните в раскрывающемся списке Ориентация.

6 Выберите значение Четыре: Влево в списке Конфигурации по умолчанию и нажмите кнопку OK.

7 Щелкните по инструменту Прямоугольник на панели инструментов и нарисуйте прямоугольник.

8 Выделив прямоугольник, выберите в меню пункт Твердые тела — Нарисовать — Вытянуть и перетащите указатель в окне рисования.

9 Выделив прямоугольник и сферу, выберите команду Вид — Затенить.

Инструмент «Облако правки»: В CorelCAD 2014 можно создавать облака правки для нанесения различных пояснительных надписей и пометок к элементам чертежа, что упрощает процесс правки и ревью. Облака правки могут быть различной формы: прямоугольной, овальной или произвольной. В дополнение к этому можно задать определенные параметры для облака: цвет, стиль и толщину линии, слой облака, а также радиус дуговых сегментов.


Высокое быстродействие как в Windows®, так и в Mac OS®



CorelCAD 2014 позволяет быстро и эффективно работать как в операционной системе Windows, так и в Mac OS.

Свобода выбора операционной системы: Приложения САПР почти всегда были предназначены для работы в операционных системах Windows, но CorelCAD меняет эту традицию. Независимо от того, какую операционную систему — Mac или Windows — предпочитает пользователь, CorelCAD позволит ему работать быстро и эффективно. И хотя возможности некоторых САПР для Mac OS ограничены по сравнению с их эквивалентом для Windows, решение CorelCAD предоставляет пользователям Windows и Mac практически одинаковый уровень функциональности (все функции относятся к обеим операционным системам, если не указано иное). Сравнение функциональных возможностей приложения в операционных системах Windows и Macintosh приведено в разделе Сравнение CorelCAD 2014 для Windows и Mac OS на странице 15.

Улучшено! Поддержка Windows® 8.1 и Mac OS® Mavericks: CorelCAD 2014 поддерживает Windows 8 для ПК. Пользователи Mac могут воспользоваться новыми функциями Mac OS X, включая режим отображения во весь экран. Кроме того, приложение CorelCAD 2014 оптимизировано для работы в режиме высокого разрешения, что обеспечивает отображение четких, легко читаемых элементов пользовательского интерфейса на мониторах высокого разрешения

Улучшено! Встроенная поддержка 64-разрядных систем: Для пользователей как Windows, так и Mac OS CorelCAD 2014 предлагает 64-разрядную САПР-среду, которая обеспечивает эффективную обработку большие файлов САПР. Кроме того, включена также 32-битная версия для пользователей Windows, которым она может понадобиться для работы на менее мощном оборудовании.

Улучшено! Скорость и производительность приложения: 64-битная архитектура CorelCAD 2014 обеспечивает повышенную скорость работы приложения на платформах Windows и Mac OS. Приложение также обеспечивает ускоренное восстановление изображения, что способствует более плавному масштабированию и панорамированию при работе с большими и сложными чертежами САПР.
Настройка и автоматизация для повышения производительности



Для настройки интерфейса CorelCAD 2014 не нужны знания в области программирования. Можно также автоматизировать выполнение задач или добавлять в приложение новые функциональные возможности.

Поддержка автоматизации: Пользователи могут повысить производительность своего труда, воспользовавшись интерфейсами программирования LISP и Microsoft® Visual Studio® Tools for Applications (VSTA)* для автоматизации повторяющихся задач и создания собственных функций, подпрограмм и подключаемых модулей. Кроме того, в магазине подключаемых модулей* можно приобрести дополнения и модули расширения для CorelCAD от сторонних разработчиков, позволяющие добавить в приложение новые функциональные возможности.

*Только в версии для Windows.

Поддержка Microsoft® Visual Studio® Tools for Applications (VSTA): Панель инструментов «VSTA Manager» позволяет записывать, редактировать и запускать макросы VSTA. Для пользователей Windows CorelCAD 2014 предлагает встроенные функции VSTA, которые дают возможность автоматизировать выполнение рутинных задач и повторяющихся команд. Кроме того, интеграция со средой разработки VSTA предлагает дополнительные функции для создания сложных макросов.

Улучшено! Поддержка LISP: CorelCAD 2014 теперь предлагает поддержку иконковых меню при работе с процедурами LISP. Это дает возможность создавать пользовательские диалоговые окна, в которых отображаются эскизы (SLD) компонентов САПР. Это особенно удобно при создании пользовательских библиотек. Кроме того, CorelCAD 2014 придерживается общей структуры для программирования на LISP, что облегчает повторное использование уже существующих процедур без перекомпиляции.

Улучшено! Настройка пользовательского интерфейса: В каждой отрасли, где используются САПР, существует собственный рабочий процесс. Поэтому CorelCAD 2014 легко настраивается в соответствии с потребностями различных секторов и проектов. Без каких-либо знаний в области программирования можно настроить пользовательский интерфейс с учетом конкретных задач. Пользовательские конфигурации рабочих пространств можно затем сохранять в профилях пользователей и внедрять в масштабе всей организации. Это позволяет приспосабливать пользовательский интерфейс к конкретным проектам и обеспечивает максимальную производительность труда. Кроме того, теперь можно импортировать файлы CUIX, что облегчает переход для тех пользователей AutoCAD, которые работают с пользовательскими рабочими пространствами.


Упорядоченные макеты: CorelCAD позволяет упорядочивать чертежи с помощью нескольких мозаичных макетов, используя листы с вкладками. Для каждого листа можно определить отдельный стиль печати или черчения. Окно рисования можно разделить на несколько видов, в которых чертеж будет представлен в разных перспективах. На листы можно помещать рамки чертежа, штампы, спецификации и другую информацию. Двойной щелчок кнопки мыши позволяет переключаться между пространством модели и пространством листа для настройки представления модели или ее изменения.


Совместимость, обеспечивающая налаженный рабочий процесс



CorelCAD 2014 позволяет легко сотрудничать и обмениваться данными с коллегами и заказчиками благодаря поддержке множества стандартных отраслевых форматов.

Доступ к эскизам и чертежам из CorelDRAW®*: Многие дизайнеры предпочитают использовать графические приложения для создания эскизов, а затем приступать к разработке точных САПР-чертежей и двух- и трехмерных моделей. В CorelCAD 2014 для Windows можно импортировать файлы CorelDRAW (CDR) и Corel DESIGNER (DES) в формате объектов пространства модели с представлением на макетном листе. Можно работать с многостраничными файлами CDR (с версии 8 до выпуска X6) и файлами DES (с версии 10 до выпуска X6).

Публикация в CorelDRAW® и Corel DESIGNER®*: Файлы САПР используются не только в отделах проектирования, однако включение таких файлов в другие рабочие процессы предприятия всегда было сложной задачей. Специалистам по графике, работающим в других отделах компании, регулярно приходится иметь дело с файлами САПР, потому что содержимое этих файлов часто идеально подходит для презентаций, технической документации или маркетинговых материалов. CorelCAD 2014 упрощает применение файлов САПР для других целей: благодаря возможности экспорта в форматы CorelDRAW и Corel DESIGNER* можно быстро открыть и повторно использовать эти файлы.

Удобный обмен файлами: CorelCAD 2014 облегчает совместную работу с коллегами и заказчиками благодаря поддержке множества стандартных отраслевых форматов, в том числе SVG, ACIS SAT и DWF. А возможность сохранения контента в файлах PDF гарантирует, что просмотреть чертежи смогут и пользователи, не имеющие программного обеспечения САПР.

Повторное использование опубликованных материалов: Поддержка PDF- и DGN-оснований в CorelCAD 2014 обеспечивает возможность повторного использования опубликованных PDF-файлов и файлов CAD (Microstation DGN) в качестве внешних ссылок в ваших чертежах.

Применение трехмерных файлов САПР для других целей: Благодаря поддержке популярного формата файлов ACIS SAT для обмена трехмерной графикой CorelCAD 2014 позволяет открывать трехмерные модели и работать с ними.


Печать трехмерных проектов из CorelCAD: Можно экспортировать несколько объемных объектов в стереолитографический формат STL — формат файлов, наиболее часто используемый для объемной печати. Поддержка формата STL обеспечивает прямой вывод на большинство 3D-принтеров для печати прототипов трехмерных моделей.

Работа с файлами географических информационных систем (GIS): CorelCAD 2014 предлагает поддержку файлов GIS в формате ESRI Shape (.SHP). Это позволяет выполнять визуализацию карт и географических моделей, созданных в географических информационных системах (GIS).

*Импорт и экспорт документов в форматах CorelDRAW (.CDR) и Corel DESIGNER (.DES) доступны только в версии CorelCAD 2014 для Windows.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Создание 3D-иллюстраций — прототип системы


Привет, Хабр! В институте на моей специальности был курс 'Начертательная геометрия'. Дисциплина мне понравилась с самого начала. А когда к концу курса я узнал, какие страшные штуки можно вытворять, имея за душой всего линейку и циркуль, начертательная геометрия навсегда покорила мое сердце. С тех пор меня не покидала навязчивая идея сделать что-нибудь на компьютере в духе объемных чертежных построений.


Не так давно, я с удивлением обнаружил, что даже мой ноутбук (далеко не самый новый и мощный) поддерживает стандарт WebGL. Стало понятно, что подходящий момент пришел. В результате некоторых усилий получился прототип системы создания и публикации 3D-иллюстраций.


http://ift.tt/1bcqFAv


Интересная возможность, которую удалось реализовать — просмотр иллюстраций на 3D-телевизорах в стереорежиме без каких-либо драйверов и плагинов. Вывод осуществляется прямо из браузера в формате Side-By-Side. В общем-то ради этого все и затевалось.


Вполне возможно, что увидеть систему в работе удастся совсем немногим. Прошу простить за возможные хабра-эффекты и торчащие уши – это лишь прототип. Кто хочет узнать о системе подробнее – прошу под кат.


Возможности прототипа




На данный момент протоип обладает следующими возможностями:


  • Создание сцены ведется на языке PHP. Cоответственно доступны все возможности языка (переменные, массивы, циклы, условия, вспомогательные функции). Можно создавать 3D-сцены, используя примитивы (точка, отрезок, вектор, параллелепипед он-же плоскость, сфера, конус, цилиндр).

  • Объекты могут быть разных цветов (рекомендуется использовать серый, красный, синий, зеленый, желтый). Кроме того может быть назначена произвольная прозрачность (от полностью непрозрачного до полностью прозрачного).

  • Можно размещать и вращать в пространстве как сами примитивы, так и рабочую систему координат (удобно, когда все построение нужно сделать под нужным углом и в нужной точке)

  • Можно добавить несложную анимацию. Пока доступно только отобразить объект, скрыть объект, вывести текстовый комментарий, сделать паузу, чтобы сцена какое-то время отображалась зрителю.

  • Все, что создается можно просматривать в нескольких режимах. (См.ниже)

  • Сценой можно управлять с помощью мыши. Сцену можно вращать, приближать-удалять, указывать новый центр вращения. В стерео-режимах на мышь реагирует только сцена для левого глаза (в режиме Перекрестного взгляда она находится справа!).




Режимы просмотра 3d-сцен:


  • Моно-режим – одно окно.

  • Перекрестный взгляд – для левого глаза сцена справа, для правого – слева.

  • Режим Стерео ТВ – режим Side-By-Side. Правый глаз справа, левый глаз слева. Оба изображения сжаты по горизонтали в два раза.

  • Все режимы имеют возможность разворачиваться на полный экран (в режиме Стерео-ТВ без этого ничего не получится)

  • Существует режим для крутых парней – называется Исходный код (чтобы строить чертеж в уме по PHP коду– без компьютера)


Про чертежную доску и нездоровый педантизм




На сценах в качестве фона может присутствовать объемная чертежная доска. На доске располагается лист бумаги формата A0. Старался сделать, чтобы дерево было похоже на дерево, а бумага — на бумагу. Если присмотрется, то можно увидеть по четырем углам канцелярские кнопки. Надеюсь, Хабр простит мне эти нехитрые конструкторские радости.


Думаю, доска полезна – она задает систему координат, дает ощущение пространства и масштаба. Чертежи на ее фоне смотрятся лучше. По умолчанию центр координат совпадает с центром листа. Размеры задаются в миллиметрах (размеры листа соответственно 841×1189). Если Вы будете строить, задавая Z=0, то построения будут проходить в плоскости бумаги. Ну а кто наберется смелости и выйдет в объем – должен задействовать Z-значения, отличные от нуля.


Еще хочется сказать, что примитивы, не имеющие толщины – такие, как точка, вектор, отрезок – все равно реализованы как объемные тела – мне кажется это более зрелищно.


Демо-иллюстрации




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

Demo 1. Примитивы.


Demo 2. Составные объекты.


Demo 3. Объект в формате x3d.


Demo 4. Анимация. Построение тетраэдра. (Анимация включается в левом верхнем углу сцены).


Привожу исходный код Demo3, чтобы было ясно, как примерно производятся построения.



function zzCustomLamp($place, $color) {
zzSetCoord($place);
zzLamp('', array(0,0,0));
for ($i=1; $i<=6; $i++) {
zzSetStyle($color, $i/7);
zzCircle('', array(0,0,$i*40), 50+$i*10);
}
}

zzDesk();
zzCustomLamp(array(-200,-200,0),'red');
zzCustomLamp(array(-200,200,0),'green');
zzCustomLamp(array(200,-200,0),'blue');
zzCustomLamp(array(200,200,0),'gray');


Испытания на 3D-телевизоре




Режим Стерео ТВ был испытан на телевизоре Phillips с пассивными очками. Компьютер подключался через HDMI. Стереоэффект присутствовал. При вращении сцены некоторые объекты кокетливо вылезали из экрана. Был замечен один недостаток — в стереорежиме неудобно управлять сайтом, поэтому часто приходилось переходить в режим 2D. Вообще пытался испытавать сайт на всех компьютерах, до которых смог дотянуться. Тестировал в браузерах Firefox и Chrome. Вроде работает. Но конечно лучшие результаты и плавность движений достигается на игровых комптьютерах с сильной видеокартой.

Инструкции для желающих почертить




Следующая информация – для тех, кто хочет почертить самостоятельно. Нужно войти в систему под логином editor (пароль совпадает с логином). Далее выбрать – Создать публикацию, 3D-сцена. В окошке создания материала можно набирать команды. Самое первое, что нужно – отделить PHP код от основного содержания строкой ###3D###. Дальше набрать zzDesk(); — если хотите вывести чертежную доску. А дальше – вводить команды.

Одной из целей проекта было максимально упростить язык построения сцен. Думаю, что структура команд была мне навеяна старой доброй графической библиотекой Турбо-Паскаля. Ниже привожу полный перечень доступных на текущий момент команд.



// ###3D### - строка отделяющая PHP-код

$place=array( $x, $y, $z )
$size=array( $dx, $dy , $dz )
$rotation = array ( $axis_x, $axis_y, $axis_z, $angle)

// $angle задается в ГРАДУСАХ, прошу прощение у любителей математики.

$color = ‘gray’ ‘red’ ‘green’ ‘blue’ ‘yellow’
$transparent = 0..1 (прозрачность – 1 – полностью прозрачный).
$emissive = true – объект подсвечен изнутри

$id = ‘circle01’ - идентификатор объекта
// задается при создании примитива,
// используется при дальнейшей анимации

$id_comment = ‘com01’ - идентификатор коментария
// любой тег в тексте публикации может быть помечен
// атрибутом id, и затем содержимое тега
// можно вывести как комментарий в построении

// настройка параметров черчения
function zzSetHide(); // объекты будут создаваться невидимыми (для будущей анимации)
function zzSetShow(); // объекты будут создаваться видимыми
function zzSetStyle($color, {$transparent}, {$emissive} ); // задание цвета и прозрачности
function zzSetCoord($center, {$rotation} ); // перемещение локальной системы координат

// черчение примитивов
function zzDesk(); // чертежная доска
function zzPoint($id, $place) ; // точка
function zzLine($id, $pBegin, $pEnd); // отрезок
function zzVector($id, $pBegin, $pEnd); // вектор (со стрелкой на конце)
function zzCircle($id, $place, $radius, {$rotation} ) ; // окружность
function zzBox($id, $place, $size, {$rotation} ) ; // параллелипипед (при желании плоскость)
function zzSphere($id, $place, $radius) ; // сфера
function zzCone($id, $place, $radius, $height, {$rotation} ); // конус
function zzCylinder($id, $place, $radius, $height, {$rotation} ) ; // цилиндр
function zzLamp($id, $place) ; // лампа, формат x3d (играет роль teapot – ну вы поняли)

// анимация
function zzStepHide($id); //скрыть объект
function zzStepShow($id); //показать объект
function zzStepComment($comment_id); // вывести комментарий
function zzStepCommentHide($comment_id); // скрыть панель комментариев (иногда полезно)
function zzStepPause(); //показать сцену пользователю (сейчас настроено 2 сек)



Если вдруг Вам выведется пустая сцена, или совсем пустое окно браузера – значит что-то не в порядке в коде. Прошу меня извинить, система обработки ошибок в зачаточном состоянии. Лечится либо кнопкой назад, либо набором edit в строке адреса после идентификатора публикации.


Что не удалось реализовать в прототипе




Многие возможности остались за рамками прототипа, хотя намерения их реализовать были.


  • Хотелось бы больше примитивов (очень не хватает кусков – дуг, секторов, многоугольных плоскостей).

  • Конечно же, сплайн-поверхности и сплайн-кривые.

  • Очень хотелось реализовать объемные подписи, чтобы прямо в объеме подписывать примитивы. К сожалению не хватило ума. В WebGL-библиотеке возможность есть, но кое-что не заработало так как мне хотелось.

  • Хотелось бы несложную геометрическую арифметику, чтобы находить точки пересечения примитивов.

  • Более широкие возможности анимации. Плавные движения и трансформации. (Главное при этом не усложнить все настолько, что трудно будет этим пользоваться).


Заглянем под капот




Под капотом: в качестве CMS – рабочая лошадка Drupal 6, в качестве WebGL-библиотеки – x3dom (читается как xFreedom). И то и другое пришлось немного допилить напильником. Что было конкретно сделано:


  • Самое главное — доработана библиотека x3dom. Смысл доработки – сделать синхронизацию двух видов для использования в стереорежиме. Пришлось лезть в сердце библиотеки и руками по локоть в крови управлять матрицами трансформации. Кроме того в режиме Стерео-ТВ нужно было сжимать вид по горизонтали. Надежды почти не было… Но пациент выжил. Что и обеспечило работоспособность прототипа.

  • Был создан модуль к Drupal для реализации API. Был создан фильтр Drupal для распознавания 3D-кода.Немного допилена тема оформления Drupal для вывода экранов.

  • Был создан несложный JavaScript-код для управления анимацией. Еще некоторое количество обвязки из PHP и JavaScript, чтобы все вместе заработало.


Что дальше?




Хочу совершенствовать систему и добавлять различные 3D-сцены из различных областей знания. Конечно, многие вещи хотелось бы сделать изящнее. Например, мне приходится строить сцену для двух видов по отдельности. Возможностью расшарить объекты между двумя видами воспользоваться мне не удалось. Если Хабр подскажет мне какие-нибудь библиотеки и варианты более коротких путей буду очень признателен.

This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


[Из песочницы] Уравнение Кеплера: перезагрузка

Добрый день! Недавно здесь проскакивал пост про уравнение Кеплера и я был слегка поражен тем, что ничего не написано про то, каким образом оно вообще выводится и откуда, как исторически, так и математически. Как известно, Кеплер вывел его из наблюдения движения планет, а Ландау и Лифшиц вывели движение планет из…




Никакая теоретическая механика невозможна без функции Лагранжа. Ее вывод я приводить не буду, скажу лишь, что вся соль в принципе наименьшего действия Гамильтона,

image

согласно которому, механическая система движется так, что вышеуказанный интеграл, который, кстати, называется действием, имеет наименьшее возможное значение. Возможно, «варьирование функционала» что-то вам говорит — если да, то уравнение Лагранжа (УЛ) (1), оно же уравнение Эйлера, для свободной частицы следует именно оттуда — это один из вариантов его вывода. Если нет, то все чуточку хуже, а именно: мы бы разобрали второй закон Ньютона, потратили около двух страниц на выкладки, ввели понятия обобщенных координат и сил и связей и в конечном итоге пришли бы к тому же варианту. Кстати, именно вторым способом функция Лагранжа (ФЛ) (2) вводится естественным образом, как разница кинетической и потенциальной энергий.


image


image


Касательно обозначений, q — обобщенная координата, точка — производная по времени. Важно! Согласно Лагранжева формализма, обобщенные координаты и скорости — независимые величины! В случае свободной частицы (или замкнутой системы, то есть системы, на которую не действуют внешние силы):


image


Индексы у обобщенных координат обозначают, что вообще это система дифференциальных уравнений для каждой координаты в отдельности.

Если коротко и в обратную сторону, заменив обобщенные координаты на радиус-векторы и скорости:


image


мы получаем уравнение Ньютона из уравнения Лагранжа (помня о том, что производная радиус-вектора по времени равна скорости).


Тут стоит еще добавить, что ФЛ аддитивна, что значит ФЛ системы есть сумма ФЛ ее частей:


image


Отлично, у нас есть фундамент. Теперь, чтобы дойти до уравнения Кеплера, необходимо построить стены — обобщенные энергию, импульс и момент импульса. Здесь важно сделать маленькое утверждение, которое на самом деле очень большое и имеет название «Теорема Нётер»: наше пространство, по крайней в масштабах тех тел, которые мы описываем:



  • однородно,

  • изотропно,

  • обладает однородным временем.




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

Начнем с обобщенной энергии. Самое очевидное, что я могу сделать — вывести ее. Воспользуемся однородностью времени, а именно: ФЛ не зависит явно от времени, возьмем полную производную ФЛ и преобразуем, подставляя УЛ:


image


Откуда следует


image


Готово. Кстати, механические системы с сохраняющейся энергией называются консервативными.


Сохранение обобщенного импульса следует из однородности пространства, а конкретно из свободы параллельного переноса системы в пространстве. Рассмотрим бесконечно малый перенос системы в пространстве на эпсилон, т.е. радиус-векторы частей системы изменятся как (1). Изменение ФЛ запишется как (2), что в силу произвольности эпсилон можно переписать так в виде равной нулю суммы частных производных. Дальше просто, (3) и мы видим, что суммарный импульс (4) не изменяется при движении.


image


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


С моментом импульса, он же момент количества движения, все получается подобным образом, поэтому я просто выпишу результат:


image


Подытожим: у нас есть УЛ, ФЛ и три интеграла движения: энергия, импульс и момент количества движения.


Можем переходить наконец к тому, из-за чего я отнимаю ваше время :) То, из чего следует в частном случае уравнение Кеплера, называется «задача двух тел». Для начала упростим ее. Напишем ФЛ двух тел (1) и введем вектор их взаимного расстояния (2). Заодно поместим начало координат в центре инерции, что даст (3). Из второго и третьего уравнений найдем радиус-векторы обоих точек (4) и подставим в первое (5). Здесь введена приведенная масса (6).

Таким образом задача двух тел сведена к задаче одного тела в некотором центральном поле.


image


Рассмотрим момент импульса в центральном поле M=[rp]. Отсюда М и r перпендикулярны, а из постоянства М (интеграл движения, помните?) видно, что радиус-вектор системы лежит всегда в одной плоскости — у нас плоское движение, а значит самое время ввести цилиндрическую систему координат с центром в силовом центре (простите за тавтологию) и осью z, перпендикулярной плоскости движения — по сути полярную. Перепишем ФЛ:


image


и посмотрим на координату image — ее нет! Есть только ее производная по времени, что дает нам право обозвать ее циклической и сказать, что соответствующий ей обобщенный импульс сохраняется, а решение задачи упрощается. В данном случае он совпадает с моментом количества движения


image


Также в ФЛ не входит явно время, значит сохраняется заодно и энергия системы. Проведя серию выкладок


image


получим решение задачи в квадратурах, то есть в интегралах. Заодно введем эффективную потенциальную энергию


image


А при чем тут уравнение Кеплера, слышно вопрос с задних рядов. Хорошо-хорошо, уговорили, я и сам как раз собирался…


Давайте рассмотрим задачу о движении в центральном потенциальном поле


image


Знак минус обозначает притяжение (а знак плюс означал бы отталкивание, что в данном случае нам не интересно — частица отразится и уйдет на бесконечность). Эта задача даже имеет собственное имя — да, задача Кеплера. Построим эффективную потенциальную энергию и ее график. Очевидно, что при стремлении r к нулю, она стремится к бесконечности, а при стремлении радиус-вектора к бесконечности, соответственно, к нулю.



Из графика очевидно, что при энергии Е > 0 движение будет инфинитным, то есть частица уйдет на бесконечность, а при E < 0 — финитным. Форма траектории будет определяться общей формулой


image


которая после подстановки в нее вида потенциала, введения пары обозначений


image


преобразования и выбора начала отсчета угла так, что const=0, станет


image


где р и е — параметр и эксцентриситет орбиты соответственно. Вот оно, уравнение Кеплера.



Проанализируем полученные результаты. Для этого еще раз посмотрим на график эффективной потенциальной энергии.


Серые линии — возможные значения энергии системы. То есть, они, конечно, возможны все, кроме меньших image, но рассмотрим мы эти. Снизу вверх:



  • самая нижняя точка — точка минимума. E<0, e=0 — траектория движения — окружность. Случай редкий и очень простой.

  • чуть выше. Е<0, 0<e<1 — эллипс.image Движение финитно, также можно определить большую и малую полуоси эллипса как

    image


    что следует непосредственно из формул аналитической геометрии (здесь я, пожалуй, отправлю вас к Выгодскому или ближе, к Вики). Наименьшее и наибольшее расстояния до фокуса эллипса, перигелий и афелий, соответственно


    image


    что можно было, вообще говоря, получить в лоб из image. Время обращения по орбите получим из второго закона Кеплера image. Для эллипса секторная скорость image, а значит


    image


    Так мы получили третий закон Кеплера


    image.


    Здесь следует отметить, что период зависит только от энергии частицы.



  • Е=0, е=1. Траектория инфинитна, это парабола с image. Такая траектория будет у частицы, движущейся с бесконечности из состояния покоя.

  • E>0, e>1. Траектория опять инфинитна, но на этот раз это гипербола, с перигелием

    image




Пожалуй, это все, что я хотел бы рассказать про одну из фундаментальных задач механики. Задача Кеплера часто используется для проверки систем математического моделирования, как очень хорошо изученная и вместе с тем простая. Вместе с задачей о гармоническом осцилляторе это одна из двух задач о движении тела по замкнутой траектории, когда тело возвращается в исходную точку с той же самой скоростью. Задача Кеплера используется для построения новых методов классической механики, в частности Гамильтонова формализма, уравнения Гамильтона-Якоби и системы переменных «действие-угол».


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.