<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Математик среди биологов: заметки с тегом векторная графика</title>
<link>https://antonlyakh.ru/blog/tags/vektornaya-grafika/</link>
<description>Я немного умею складывать, но от вычитания у меня всегда кружится голова</description>
<author>Антон Лях</author>
<language>ru</language>
<generator>E2 (v3559; Aegea)</generator>

<itunes:owner>
<itunes:name>Антон Лях</itunes:name>
<itunes:email></itunes:email>
</itunes:owner>
<itunes:subtitle>Я немного умею складывать, но от вычитания у меня всегда кружится голова</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Три вэ: векторные модели — визуализатор — веб-страница</title>
<guid isPermaLink="false">533</guid>
<link>https://antonlyakh.ru/blog/all/tri-v-vektornye-modeli-vizualiztator-veb-stranica/</link>
<pubDate>Wed, 24 Sep 2025 22:18:11 +0300</pubDate>
<author>Антон Лях</author>
<comments>https://antonlyakh.ru/blog/all/tri-v-vektornye-modeli-vizualiztator-veb-stranica/</comments>
<description>
&lt;p&gt;У меня накопилось несколько баз данных с векторными изображениями, Это векторные контуры створок диатомовых водорослей, крючков паразитических червей моногеней и векторные траектории движения динофлагеллят &lt;i&gt;Oxyrrhis marina.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Базы лежат, пыляться и нет никакой нормальной возможности просмотреть их содержимое в онлайне. Отсюда и родилась идея о создании (универсального) веб-приложения для просмотра векторного содержимого баз.&lt;/p&gt;
&lt;p&gt;Назвал это проект «Три вэ».&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/tri-v---nachalo-dark.png" width="800" height="80" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Быстро сформулировал задачу и требования к ней.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Дано:&lt;/b&gt; несколько баз данных, содержащих векторные модели форм микроорганизмов, их частей и траекторий движения.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Необходимо:&lt;/b&gt; создать веб-приложения для онлайн просмотра векторных моделей.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Требования:&lt;/b&gt; базовое приложение имеет унифицированный интерфейс, который позволяет подключать любую из баз данных и предоставляет средства для просмотра моделей.&lt;/p&gt;
&lt;p&gt;Получилось очень куцо.&lt;/p&gt;
&lt;p&gt;Потом прогнал текст через нейросеть с просьбой добавить деталей.&lt;/p&gt;
&lt;p class="loud"&gt;Оказалось, что за простыми формулировками скрывается несколько неотвеченных вопросов и функций, которые я подразумеваю, но не актуализирую в явном виде.&lt;/p&gt;
&lt;p&gt;&lt;span id="ai-answer"&gt;Ниже — ответ нейросети.&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Чтобы сделать требования более четкими и полными, предлагаю структурировать их по следующим категориям:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1. Общие требования&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Цель приложения:&lt;/b&gt; Разработать веб-приложение для онлайн-просмотра векторных моделей микроорганизмов, хранящихся в нескольких базах данных.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Целевая аудитория:&lt;/b&gt; Ученые, исследователи в области микробиологии, студенты (или уточнить).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Ключевые функции:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Подключение к различным базам данных с векторными моделями.&lt;/li&gt;
  &lt;li&gt;Просмотр моделей с минимальным набором функций (например, визуализация, масштабирование, вращение).&lt;/li&gt;
  &lt;li&gt;Возможность расширения функциональности (например, добавление аннотаций, фильтров, экспорта).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;2. Функциональные требования&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Подключение к базам данных:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Поддержка различных типов баз данных (например, SQL, NoSQL, файлы).&lt;/li&gt;
  &lt;li&gt;Унифицированный API или адаптер для подключения новых баз данных без изменения кода приложения.&lt;/li&gt;
  &lt;li&gt;Поддержка безопасного подключения (аутентификация, шифрование данных).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Просмотр моделей:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Визуализация векторных моделей в 2D/3D (указать форматы, например, STL, OBJ, или другие).&lt;/li&gt;
  &lt;li&gt;Интерактивные функции: вращение, масштабирование, панорамирование.&lt;/li&gt;
  &lt;li&gt;Отображение метаданных моделей (например, название микроорганизма, источник, описание).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Расширяемость:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Модульная архитектура, позволяющая добавлять новые функции (например, плагины для анализа моделей).&lt;/li&gt;
  &lt;li&gt;Поддержка новых форматов данных через конфигурационные файлы или API.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Дополнительные функции (если применимо):&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Фильтрация/поиск моделей по параметрам (например, тип микроорганизма, дата создания).&lt;/li&gt;
  &lt;li&gt;Экспорт моделей или их визуализаций (например, в PNG, PDF).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;3. Нефункциональные требования&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Производительность:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Поддержка загрузки моделей объемом до [указать объем, например, 100 МБ] за разумное время (например, &lt; 5 секунд).&lt;/li&gt;
  &lt;li&gt;Оптимизация для работы с большими наборами данных.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Совместимость:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Поддержка современных браузеров (например, Chrome, Firefox, Safari, Edge).&lt;/li&gt;
  &lt;li&gt;Адаптивный дизайн для работы на десктопах и мобильных устройствах (или уточнить).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Безопасность:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Защита данных при передаче (например, HTTPS).&lt;/li&gt;
  &lt;li&gt;Контроль доступа к базам данных (например, через OAuth или токены).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Масштабируемость:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Возможность обработки подключения новых баз данных без значительных изменений в архитектуре.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Доступность:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Поддержка стандартов доступности (например, WCAG 2.1).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;4. Технические требования&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Технологический стек &lt;/b&gt;(рекомендации, если не указан):
&lt;ul&gt;
  &lt;li&gt;Фронтенд: JavaScript/TypeScript с использованием библиотек для 3D-визуализации (например, Three.js, Babylon.js).&lt;/li&gt;
  &lt;li&gt;Бэкенд: Node.js, Python (FastAPI/Flask) или другой фреймворк для работы с базами данных.&lt;/li&gt;
  &lt;li&gt;Базы данных: Поддержка SQL (PostgreSQL, MySQL) и/или NoSQL (MongoDB).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Форматы данных:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Указать поддерживаемые форматы векторных моделей (например, STL, OBJ, или специализированные биоинформатические форматы).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;API:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;REST или GraphQL для взаимодействия с базами данных.&lt;/li&gt;
  &lt;li&gt;Документация API (например, с использованием Swagger/OpenAPI).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;5. Ограничения и предположения&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Ограничения:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Сроки разработки (например, 3 месяца).&lt;/li&gt;
  &lt;li&gt;Бюджет (если есть).&lt;/li&gt;
  &lt;li&gt;Ограничения по поддерживаемым устройствам/браузерам.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Предположения:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Базы данных имеют стандартные API или доступ через SQL-запросы.&lt;/li&gt;
  &lt;li&gt;Пользователи имеют базовые навыки работы с веб-приложениями.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;Есть над чем подумать.&lt;/p&gt;
</description>
</item>

<item>
<title>Двойная дуга в СВГ пути</title>
<guid isPermaLink="false">472</guid>
<link>https://antonlyakh.ru/blog/all/dvoynaya-duga-v-svg-puti/</link>
<pubDate>Sat, 05 Aug 2023 16:42:57 +0300</pubDate>
<author>Антон Лях</author>
<comments>https://antonlyakh.ru/blog/all/dvoynaya-duga-v-svg-puti/</comments>
<description>
&lt;p&gt;Это короткая техническая заметка о декодировании &lt;abbr&gt;СВГ&lt;/abbr&gt; тега &lt;var&gt;path&lt;/var&gt;.&lt;/p&gt;
&lt;p&gt;Я — ретроград и у меня есть Дельфи-библиотека для загрузки СВГ графики. Она хорошо работала до тех пор, пока в теге &lt;var&gt;path&lt;/var&gt; не встретился такой набор команд:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;... &lt;tt&gt;a25.35,25.35,0,0,0-.32,8.58,32.42,32.42,0,0,0,1.53,6.3&lt;/tt&gt; ...&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths#arcs"&gt;По спецификации&lt;/a&gt; &lt;var&gt;a&lt;/var&gt; — рисует дугу и содержит семь параметров (семь чисел). А здесь их четырнадцать.&lt;/p&gt;
&lt;p&gt;Немного подумав, понял, что вторая семерка чисел определяет следующую дугу. То есть без сокращений будет так:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;... &lt;tt&gt;a25.35,25.35,0,0,0-.32,8.58 a32.42,32.42,0,0,0,1.53,6.3&lt;/tt&gt; ...&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Учту это правило в библиотеке.&lt;/p&gt;
</description>
</item>

<item>
<title>Контуры иконок Чикина</title>
<guid isPermaLink="false">356</guid>
<link>https://antonlyakh.ru/blog/all/kontury-ikonok-chikina/</link>
<pubDate>Fri, 20 Mar 2020 22:19:08 +0300</pubDate>
<author>Антон Лях</author>
<comments>https://antonlyakh.ru/blog/all/kontury-ikonok-chikina/</comments>
<description>
&lt;p&gt;&lt;a href="http://sergeychikin.ru/365/"&gt;Сергей Чикин&lt;/a&gt; каждый день рисует одну иконку. Еще он делится своими секретами, ведет курс и работает в Бюро, но я сейчас не об этом.&lt;/p&gt;
&lt;p&gt;Когда смотришь на иконки Чикина, кажется, что контур — это отдельная линия. Если изменить ее толщину, контур потолстеет или похудеет.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/original-chikin-icons.png" width="800" height="200" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;На самом деле контур возникает за счет наложения фигур. Даже снежинка и спираль — это многоугольники без контура.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/modified-chikin-icons.png" width="800" height="200" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Для меня это прям открытием стало.&lt;/p&gt;
</description>
</item>

<item>
<title>Как построить эллипс по пяти точкам. Плагин для Инкскейпа</title>
<guid isPermaLink="true">https://antonlyakh.ru/blog/all/postroit-ellips-po-pyati-tochkam-plagin-dlya-inkskeypa/</guid>
<link>https://antonlyakh.ru/blog/all/postroit-ellips-po-pyati-tochkam-plagin-dlya-inkskeypa/</link>
<pubDate>Wed, 28 Jun 2017 19:00:07 +0300</pubDate>
<author>Антон Лях</author>
<comments>https://antonlyakh.ru/blog/all/postroit-ellips-po-pyati-tochkam-plagin-dlya-inkskeypa/</comments>
<description>
&lt;p&gt;&lt;a href="http://antonlyakh.ru/blog/all/pancir-diatomovyh-vodorosley-eto-korobochka/"&gt;Диатомовые водоросли&lt;/a&gt; иногда ложатся полубоком на предметный столик электронного микроскопа.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/T.-prosckinae-outer-and-inner-valve-side.png" width="800" height="365" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;i&gt;Thalassiosira proschkinae&lt;/i&gt; — крошечная диатомовая из Азовского моря. СЭМ. Наружняя и внутреняя поверхность створки; правая створка деформирована. Фото Е.Д. Бедошвили, А.М. Лях&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Такой полуанфас бывает удобен. Он помогает понять геометрию и морфологию кремниевого панциря. Но в данном случае мне надо вернуть створке первоначальную круглую форму, так как сейчас, из-за поворота, она стала эллиптической. Для этого надо найти главные оси эллипса, чтобы понять, как он повернут.&lt;/p&gt;
&lt;p&gt;Из аналитической геометрии известно, что любые пять точек плоскости однозначно задают коническое сечение, если никакие три их них не лежат на одной прямой. На Мат.-стакэксченже описан  &lt;a href="https://math.stackexchange.com/a/1217797/57054"&gt;алгоритм построения эллипса по пяти точкам&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Все данные есть. И я уже было собрался писать программу, но нашел &lt;b&gt;&lt;a href="http://pernsteiner.org/inkscape/ellipse_5pts/"&gt;плагин для Инкскейпа&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;После установки, он доступен в разделе Extensions &amp;rarr; Generate from Path &amp;rarr; Ellipse by 5 Points.&lt;/p&gt;
&lt;p&gt;Плагин преобразует ломаную из пяти точек в эллипс. Если эллипс не получается, плагин ничего не строит. Плагин правильно решает задачу, но эллипс иногда не проходит по границе створки.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/5-points-polyline-2-ellipse.png" width="800" height="365" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Плагин преобразует пятивершинную ломаную линию в эллипс&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Допускаю, что при подготовке к микроскопированию створка диатомовых деформируется. Поэтому эллипс не совпадает.&lt;/p&gt;
&lt;p&gt;А есть ли такой плагин для Иллюстратора?&lt;/p&gt;
</description>
</item>

<item>
<title>Схема расположения фотофор на теле светящихся анчоусов (миктофид)</title>
<guid isPermaLink="true">https://antonlyakh.ru/blog/all/scheme-of-myctophidae-photophores/</guid>
<link>https://antonlyakh.ru/blog/all/scheme-of-myctophidae-photophores/</link>
<pubDate>Mon, 14 Mar 2016 19:57:03 +0300</pubDate>
<author>Антон Лях</author>
<comments>https://antonlyakh.ru/blog/all/scheme-of-myctophidae-photophores/</comments>
<description>
&lt;p&gt;&lt;span style="display: inline-block; font-weight: bold; padding: 6px; background-color: #7fC"&gt;&lt;b&gt;&lt;a href="http://antonlyakh.ru/download/?myctophoto"&gt;Скачать схему расположения фотофор миктофид&lt;/a&gt; (АИ, 160 КБ)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Светящиеся анчоусы относятся к семейству Myctophidae. Их  еще называют миктофовыми рыбами или &lt;i&gt;миктофидами&lt;/i&gt;.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/Solvin-Zankl.jpg" width="500" height="335" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Светящаяся миктофида. &amp;copy; &lt;a href="http://solvinzankl.photoshelter.com/image/I0000dgQ2prpFW.s"&gt;Солвин Занкл&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Миктофиды глубоководные рыбы. Они встречаются от поверхности до глубины более 2 км. Рыбы мелкие: от 2 до 25 см длиной, но большинство экземпляров не превышают 15 см. Однако в глубинах океана их так много, что их считают потенциальным объектом промысла. Мясо миктофид вполне съедобно.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/worms-mictophydae.png" width="500" height="260" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;После формалина миктофиды похожи на консервированный шпрот, по этой причине из обозвали анчоусами. &lt;a href="http://www.marinespecies.org/photogallery.php?pic=40656"&gt;Фото Вормса&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Примечательная особенность миктофид — разбросанные по телу многочисленные светящиеся органы — &lt;i&gt;фотофоры&lt;/i&gt;. Это крошечные фонарики. Они светятся за счет химических реакций биолюминесценции и испускают синий, зеленый или желтый свет. Фотофоры помогают миктофидам подсвечивать окружающее пространство и находить вкусных планктонных рачков, узнавать друг друга, общаться и &lt;a href="https://www.google.com/search?q=противотеневой+эффект"&gt;маскироваться&lt;/a&gt;.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/family_myctophidae_by_annarchist.jpg" width="456" height="248" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Подглазничные фотофоры освещают пространство перед рылом рыбы, примерно как на &lt;a href="http://annarchist.deviantart.com/art/Family-Myctophidae-42949909"&gt;рисунке АннаРхиста&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Расположение фотофор уникально у каждого вида. Поэтому ихтиологи используют фотофоры для идентификации миктофид.&lt;/p&gt;
&lt;p&gt;Так как фотофор много, исследователи обозначили каждую фотофору и нарисовали схемы-подсказки. Я нашел шесть таких схем.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/USSR-myctophidae-photophores-scheme.gif" width="800" height="786" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Определители по фауне СССР. Том 84. Рыбы Японского моря и сопредельных областей Охотского и Желтого морей. Часть 2. Ascipenseriformes-Polynemiformes&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/FAO-Myctophydae.gif" width="800" height="414" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;FAO fishes identification sheets for fishery purposes. &lt;a href="ftp://ftp.fao.org/docrep/fao/009/ad468e/ad468eIO.pdf"&gt;Myctophidae&lt;/a&gt; (ПДФ, 0,5 МБ)&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/unknown.gif" width="800" height="325" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Подарок знакомого ихтиолога&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/tolweb-Myctophidae.gif" width="800" height="305" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;a href="tolweb.org/Myctophidae"&gt;Миктофида с Древа жизни&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/Hygophum-hygomii-wikipedia.gif" width="800" height="395" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;a href="https://commons.wikimedia.org/wiki/File:Hygophum_hygomii_Photophores.jpg"&gt;&lt;i&gt;Hygophum hygomii&lt;/i&gt; из Википедии&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/Myctophidae-in-Tatsuta-et-al-(2014).gif" width="800" height="423" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Рисунок из &lt;a href="http://eprints.lib.hokudai.ac.jp/dspace/handle/2115/55459"&gt;статьи Татсуты с соавторами, 2014&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Ни одна мне не подошла и я нарисовал свою.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/myctophydae-photophores-signed.png" width="800" height="350" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;&lt;a href="http://antonlyakh.ru/download/?myctophoto"&gt;Скачать схему расположения фотофор миктофид&lt;/a&gt; (АИ, 160 КБ)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Схема сделана в Иллюстраторе. В основе &lt;a href="http://www.fishwisepro.com/Pictures/details.aspx?SId=57497&amp;PictureId=1"&gt;изображение самки &lt;i&gt;Benthosema pterotum&lt;/i&gt;&lt;/a&gt;. Тело, плавники, жаберные крышки, боковая линия и челюсти рыбы — отдельные контуры. Значит на основе рисунка вы сможете изобразить строение любой костной рыбы. Расположение фотофор абстрактно, основано на вышеприведенных изображениях.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Я разрешаю использовать схему для любых целей. Разрешаю вносить правки и приветствую правки, улучшающие восприятие схемы. Я буду рад, если кто-то сделает схему лучше и поделится работой в комментариях.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Готовую схему я сделаю интерактивной и использую в определителе миктофид Мирового океана.&lt;/p&gt;
&lt;h3&gt;Дополнительное чтение&lt;/h3&gt;
&lt;p&gt;«&lt;a href="http://www.vokrugsveta.ru/vs/article/311/"&gt;Подводная феерия&lt;/a&gt;». Ирина Травина рассказала о морской биолюминесценции&lt;/p&gt;
</description>
</item>

<item>
<title>Координаты кривых из СВГ файла</title>
<guid isPermaLink="true">https://antonlyakh.ru/blog/all/koordinaty-krivyh-iz-svg-fayla/</guid>
<link>https://antonlyakh.ru/blog/all/koordinaty-krivyh-iz-svg-fayla/</link>
<pubDate>Wed, 30 Dec 2015 19:29:28 +0300</pubDate>
<author>Антон Лях</author>
<comments>https://antonlyakh.ru/blog/all/koordinaty-krivyh-iz-svg-fayla/</comments>
<description>
&lt;p&gt;&lt;span style="display: inline-block; font-weight: bold; padding: 6px; background-color: #7fC"&gt;&lt;a href="http://antonlyakh.ru/download/?svg2txt"&gt;Скачать конвертер&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Для работы мне необходимы контуры микроорганизмов, которые я использую для сравнения форм. Я получаю контуры из фотографий, очерчивая объект в векторном редакторе. Программа сохраняет результат в СВГ файле, а мне нужны живые координаты точек. Чтобы получить координаты, я анализирую СВГ файл.&lt;/p&gt;
&lt;p&gt;СВГ файл состоит из тегов. Я разберу только один — &lt;abbr&gt;path&lt;/abbr&gt;, — остальные мне не нужны. Он хранит описание криволинейных и замкнутых траекторий. Траектория — это и есть тот самый контур микроорганизма.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/trajectory.jpg" width="600" height="505" alt="" /&gt;
&lt;/div&gt;
&lt;h2&gt;Учим синтаксис тега &lt;abbr&gt;path&lt;/abbr&gt;&lt;/h2&gt;
&lt;p&gt;Описание траектории вложено в тег &lt;abbr&gt;svg&lt;/abbr&gt;. Примерно так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;Заголовок подтверждающий, что это СВГ
&amp;lt;svg&amp;gt;
  &amp;lt;path ... /&amp;gt;
&amp;lt;/svg&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Тег &lt;abbr&gt;path&lt;/abbr&gt; содержит один атрибут &lt;abbr&gt;d&lt;/abbr&gt; с алгоритмом рисования траектории.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;path d=&amp;quot;алгоритм рисования&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Алгоритм состоит из &lt;i&gt;букв-команд&lt;/i&gt; и &lt;i&gt;цифр-координат,&lt;/i&gt; которые разделенны &lt;i&gt;пробелом, запятой&lt;/i&gt; или &lt;i&gt;знаком минус.&lt;/i&gt; Траекторию рисует перо, буквы-команды управляют, цифры-координаты показывают куда или как сместить перо, а разделители отделяют одно от другого.&lt;/p&gt;
&lt;h3&gt;Разделители разделяют&lt;/h3&gt;
&lt;p&gt;Пробел — это стандартный разделитель. Его можно ставить везде между командами и координатами. Спецификация СВГ разрешает не писать пробел, когда из контекста понятно, что здесь две разные сущности. Это сокращает объем СВГ-файла.&lt;/p&gt;
&lt;p&gt;Запомним:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;пробел не нужен между командой и числом;&lt;/li&gt;
&lt;li&gt;пробел не нужен после запятой;&lt;/li&gt;
&lt;li&gt;пробел не нужен перед знаком минус.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Запятая тоже разделяет два числа, но вместо нее можно написать пробел. Что именно написать — дело вкуса.&lt;/p&gt;
&lt;p&gt;Следующие три записи эквивалентны, но последняя компактнее.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;path d=&amp;quot;M 15 17 L 18 -23 Z&amp;quot; /&amp;gt;
&amp;lt;path d=&amp;quot;M 15, 17 L 18, -23 Z&amp;quot; /&amp;gt;
&amp;lt;path d=&amp;quot;M15,17L18-23Z&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Теперь о цифрах.&lt;/p&gt;
&lt;h3&gt;Цифры хранят координаты&lt;/h3&gt;
&lt;p&gt;СВГ предназначен для хранения двумерной графики. Поэтому цифры задают координаты точек на плоскости. Для каждой точки используется два числа — первое для &lt;i&gt;x&lt;/i&gt;, второе для &lt;i&gt;y&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;Координаты бывают абсолютными и относительными. Абсолютные координаты отсчитываются от нуля, относительные — от конечной точки предыдущей команды. Относительные — это шаг, на который надо сдвинуть перо относительно последней позиции.&lt;/p&gt;
&lt;p&gt;Тип координат определяет регистр буквы-команды: большая буква обозначает абсолютную позицию, маленькая — относительную.&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Заглавная буква-команда — для абсолютных координат, прописная — для относительных&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;Точка является десятичным разделителем вещественных чисел. Запись &lt;abbr&gt;12,75&lt;/abbr&gt; — это два числа: 12 и 75, тогда как &lt;abbr&gt;12.75&lt;/abbr&gt; — это одно вещественное число.&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Точка — десятичный разделитель, запятая отделяет два числа.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;Цифры еще описывают дополнительные параметры команды &lt;b&gt;A&lt;/b&gt;, которая рисует дуги.&lt;/p&gt;
&lt;h3&gt;Буквы управляют пером&lt;/h3&gt;
&lt;p&gt;Буквы — это команды, которые управляют пером. За каждой командой следуют пары координат, которые показывают, куда сместить перо или как закруглить линию. Тег &lt;abbr&gt;path&lt;/abbr&gt; использует следующие команды:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;M&lt;/b&gt; — начать новую траекторию: переместить перо в заданную точку без рисования.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Z&lt;/b&gt; — замкнуть траекторию: переместить перо в начальную точку и нарисовать линию.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;С&lt;/b&gt;, &lt;b&gt;S&lt;/b&gt; — нарисовать кубическую кривую Безье.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Q&lt;/b&gt;, &lt;b&gt;T&lt;/b&gt; — нарисовать квадратную кривую Безье.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;L&lt;/b&gt;, &lt;b&gt;Н&lt;/b&gt; и &lt;b&gt;V&lt;/b&gt; — нарисовать произвольную, вертикальную или горизонтальную прямую.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;A&lt;/b&gt; — нарисовать дугу окружности или эллипса.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Команду &lt;b&gt;A&lt;/b&gt; я пропущу, но рассмотрю остальные.&lt;/p&gt;
&lt;h5&gt;&lt;i&gt;M x y&lt;/i&gt;&lt;/h5&gt;
&lt;p&gt;&lt;b&gt;М&lt;/b&gt; или &lt;b&gt;m&lt;/b&gt; начинает новую траекторию. Команда перемещает перо в заданную точку и ничего не рисует. Большое &lt;b&gt;М&lt;/b&gt; — первая обязательная команда тега &lt;abbr&gt;path&lt;/abbr&gt;.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;path d=&amp;quot;M20 50...&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;h5&gt;&lt;i&gt;&lt;b&gt;Z&lt;/b&gt;&lt;/i&gt;&lt;/h5&gt;
&lt;p&gt;&lt;b&gt;Z&lt;/b&gt; или &lt;b&gt;z&lt;/b&gt; замыкает траекторию — проводит прямую линию от последней позиции пера к первой точке траектории. Регистр буквы не важен. Обычно это последняя команда тега. Если нет, тогда после &lt;b&gt;z&lt;/b&gt; опять стоит большое &lt;b&gt;M&lt;/b&gt;, которое начинает новую траекторию. Если &lt;b&gt;z&lt;/b&gt; не написано, траектория незамкнута.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;path d=&amp;quot;M20 50 L 10 10, 140 10, 110 50z&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/open-path.gif" width="384" height="132" alt="" /&gt;
&lt;/div&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;path d=&amp;quot;M20 50 L 10 10, 140 10, 110 50z&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/closed-path.gif" width="374" height="132" alt="" /&gt;
&lt;/div&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;path d=&amp;quot;M20 50 L 10 10, 140 10z M110 50, 80 60, 95 90z&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/two-closed-path.gif" width="374" height="234" alt="" /&gt;
&lt;/div&gt;
&lt;h5&gt;&lt;i&gt;&lt;b&gt;L&lt;/b&gt; x y&lt;/i&gt;&lt;/h5&gt;
&lt;p&gt;&lt;b&gt;L&lt;/b&gt; или &lt;b&gt;l&lt;/b&gt; рисует прямую линию от последней позиции пера до заданной точки. Несколько следующих друг за другом команд описывают ломаную. В такой записи, для краткости, все &lt;b&gt;L&lt;/b&gt;, кроме первой, не пишут. Если &lt;b&gt;L&lt;/b&gt; стоит после &lt;b&gt;M&lt;/b&gt;, ее тоже не пишут. Вот так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;path d=&amp;quot;M 70,12 L 24,30 L 60,70 L 120,50&amp;quot; /&amp;gt;
&amp;lt;path d=&amp;quot;M 70,12 L 24,30 60,70 120,50&amp;quot; /&amp;gt;
&amp;lt;path d=&amp;quot;M 70,12 24,30 60,70 120,50&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/polyline.gif" width="266" height="172" alt="" /&gt;
&lt;/div&gt;
&lt;h5&gt;&lt;i&gt;&lt;b&gt;H&lt;/b&gt; x&lt;/i&gt;&lt;/h5&gt;
&lt;p&gt;&lt;b&gt;H&lt;/b&gt; или &lt;b&gt;h&lt;/b&gt; рисует горизонтальную линию от последней позиции пера до указанной точки. Координата &lt;i&gt;у&lt;/i&gt; не меняется.&lt;/p&gt;
&lt;h5&gt;&lt;i&gt;&lt;b&gt;V&lt;/b&gt; x&lt;/i&gt;&lt;/h5&gt;
&lt;p&gt;&lt;b&gt;V&lt;/b&gt; или &lt;b&gt;v&lt;/b&gt; рисует вертикальную линию от последней позиции пера до указанной точки. Координата &lt;i&gt;x&lt;/i&gt; не меняется.&lt;/p&gt;
&lt;h5&gt;&lt;i&gt;&lt;b&gt;C&lt;/b&gt; cx&lt;sub&gt;1&lt;/sub&gt; cy&lt;sub&gt;1&lt;/sub&gt; cx&lt;sub&gt;2&lt;/sub&gt; cy&lt;sub&gt;2&lt;/sub&gt; x&lt;sub&gt;2&lt;/sub&gt; y&lt;sub&gt;2&lt;/sub&gt;&lt;/i&gt;&lt;/h5&gt;
&lt;p&gt;&lt;b&gt;С&lt;/b&gt; или &lt;b&gt;с&lt;/b&gt; строит кубическую кривую Безье. Она состоит из четырех точек: первая и последняя задают начало и конец кривой, две промежуточные управляют формой. Так как первая точка совпадает с текущим положением пера, то после команды &lt;b&gt;C&lt;/b&gt; указывают только три точки: две управляющие вершины (&lt;i&gt;cx&lt;sub&gt;1&lt;/sub&gt; cy&lt;sub&gt;1&lt;/sub&gt;&lt;/i&gt;), (&lt;i&gt;cx&lt;sub&gt;2&lt;/sub&gt; cy&lt;sub&gt;2&lt;/sub&gt;&lt;/i&gt;) и последнюю точку кривой (&lt;i&gt;x&lt;sub&gt;2&lt;/sub&gt; y&lt;sub&gt;2&lt;/sub&gt;&lt;/i&gt;).&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;path d=&amp;quot;M40 50 C 60 10, 90 90, 110 50&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/bezier.gif" width="314" height="118" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;Поликривая Безье&lt;/i&gt; — это несколько соприкасающихся кривых Безье, где конец одной кривой становится началом следующей. Последовательные команды &lt;b&gt;C&lt;/b&gt; описывают поликривую. Для экономии байтов все команды, кроме первой &lt;b&gt;C&lt;/b&gt;, не пишут.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;path d=&amp;quot;M30 100C50 50,70 20,100 100,110 130,45 150,65 100&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/bezier-polyline.gif" width="270" height="302" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Обычно в месте соприкосновения кривых Безье гладкость поликривой нарушается. Чтобы поликривая оставалась гладкой, используют команду &lt;b&gt;S&lt;/b&gt;.&lt;/p&gt;
&lt;h5&gt;&lt;i&gt;&lt;b&gt;S&lt;/b&gt; cx&lt;sub&gt;2&lt;/sub&gt; cy&lt;sub&gt;2&lt;/sub&gt; x&lt;sub&gt;2&lt;/sub&gt; y&lt;sub&gt;2&lt;/sub&gt;&lt;/i&gt;&lt;/h5&gt;
&lt;p&gt;&lt;b&gt;S&lt;/b&gt; или &lt;b&gt;s&lt;/b&gt; строит гладкую кубическую кривую Безье так, что ее первая управляющая вершина является зеркальным отражением второй управляющей вершины предыдущей кривой Безье. Отражение относительно начальной точки данной кривой.&lt;/p&gt;
&lt;h5&gt;&lt;i&gt;&lt;b&gt;Q&lt;/b&gt; cx&lt;sub&gt;1&lt;/sub&gt; cy&lt;sub&gt;1&lt;/sub&gt; x&lt;sub&gt;2&lt;/sub&gt; y&lt;sub&gt;2&lt;/sub&gt;&lt;/i&gt;&lt;/h5&gt;
&lt;p&gt;&lt;b&gt;Q&lt;/b&gt; или &lt;b&gt;q&lt;/b&gt; строит квадратную кривую Безье. Синтаксис команды аналогичен &lt;b&gt;C&lt;/b&gt;, только здесь используется одна управляющая вершина.&lt;/p&gt;
&lt;p&gt;Несколько команд &lt;b&gt;Q&lt;/b&gt; описывают квадратную поликривую Безье. Для краткости все команды, кроме первой &lt;b&gt;Q&lt;/b&gt;, не пишут. Чтобы квадратная поликривая получилась гладкой, используют команду &lt;b&gt;T&lt;/b&gt;.&lt;/p&gt;
&lt;h5&gt;&lt;i&gt;&lt;b&gt;T&lt;/b&gt; x&lt;sub&gt;2&lt;/sub&gt; y&lt;sub&gt;2&lt;/sub&gt;&lt;/i&gt;&lt;/h5&gt;
&lt;p&gt;&lt;b&gt;T&lt;/b&gt; или &lt;b&gt;t&lt;/b&gt; строит гладкую квадратную кривую Безье так, что ее единственная управляющая вершина является зеркальным отражением управляющей вершины предыдущей кривой Безье.&lt;/p&gt;
&lt;p&gt;Со структурой файла разобрались.&lt;/p&gt;
&lt;p&gt;&lt;a name="svg-converter"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Пишем конвертер СВГ в текст&lt;/h3&gt;
&lt;p&gt;Конвертер готов. Это экзешник. Инсталировать не нужно. Сохраните на диск и запустите.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/svg-converter.gif" width="645" height="446" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span style="display: inline-block; font-weight: bold; padding: 6px; background-color: #7fC"&gt;&lt;a href="http://antonlyakh.ru/download/?svg2txt"&gt;Скачать конвертер&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Для описания любого контура достаточно трех команд: &lt;abbr&gt;M&lt;/abbr&gt;, &lt;abbr&gt;C&lt;/abbr&gt; и &lt;abbr&gt;Z&lt;/abbr&gt;. Конвертер понимает еще и четвертую: &lt;abbr&gt;L&lt;/abbr&gt;, остальные — нет.&lt;/p&gt;
&lt;p&gt;Конвертер выбирает из СВГ-файла теги &lt;abbr&gt;path&lt;/abbr&gt;, вычисляет координаты точек траектории и сохраняет их в текстовом файле.&lt;/p&gt;
&lt;p&gt;Конвертер не проверяет валидность СВГ-файла. Ему все равно, какая информация находится вокруг тега &lt;abbr&gt;path&lt;/abbr&gt;. На вход конвертера можно подать любой мусор с корректными данными только в теге &lt;abbr&gt;path&lt;/abbr&gt;.&lt;/p&gt;
&lt;p&gt;Конвертер поддерживает пропорциональное и произвольное масштабирование координат: перед сохранением он спрашивает размер области, в которую надо вписать траекторию.&lt;/p&gt;
&lt;p&gt;Конвертер позволяет задать позицию начала координат: в одном из углов, на середине стороны или в центре прямоугольника, ограничивающего контур.&lt;/p&gt;
&lt;p&gt;Конвертер сохраняет в текстовом файле пары чисел — двумерные координаты точек контура. Десятичный разделитель — точка. Числа разделены пробелом.&lt;/p&gt;
&lt;p&gt;&lt;abbr&gt;12.3 15.6 78.4 24.1 15 123&lt;/abbr&gt;&lt;/p&gt;
&lt;h3&gt;Детали&lt;/h3&gt;
&lt;p&gt;Конвертер написан на Дельфи 7.&lt;/p&gt;
&lt;p&gt;Пары чисел вырезаю из СВГ-файла с помощью регулярного выражения. Понимает числа разделенные пробелом, запятой или минусом.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;/(-?\d+(\.\d+)?)[,|\s]?(-?\d+(\.\d+)?)\s?/&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Для построения кубической кривой Безье применяю &lt;a href="https://rsdn.ru/article/multimedia/Bezier.xml"&gt;адаптивное разбиение&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Полученные данные анализирую методами геометрической морфометрии. Но это уже другая история.&lt;/p&gt;
&lt;p&gt;С Новым годом!&lt;/p&gt;
</description>
</item>


</channel>
</rss>