Я сделал логотип в Inkscape. Для обучения я хотел, чтобы форма колеса в логотипе вращалась с помощью поддержки анимации в SVG.
Реализовать вращение было легко, но мне было сложно указать правильную ось вращения. Форма представляла собой зубчатое колесо, и я хотел, чтобы оно вращалось вокруг своего центра. Метод проб и ошибок показал, что координата xy (47.1275, 1004.17) (компоненты которой странно асимметричны, но я предполагаю, что это связано с матрицами преобразования, применяемыми в Inkscape) была хорошим приближением (см. тег animateTransform ниже), но как бы я получить это из первых принципов?
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 321.281 150.799" xmlns:dc="http://purl.org/dc/elements/1.1/">
<g transform="translate(-9.9178912,-891.57237)">
<g transform="matrix(1.9522781,0,0,1.9522781,4.6434311,-1008.1558)">
<animateTransform attributeType="xml" attributeName="transform" type="rotate" from="0 47.1275 1004.17" to="45 47.1275 1004.17" dur="2s" fill="freeze" additive="sum" repeatCount="indefinite" />
<g transform="matrix(0.65043772,0,0,0.65043772,-143.67477,980.4256)" stroke="#666" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="7.68713093" fill="none">
<path stroke-linejoin="miter" d="m293.404-3.51576c-2.73916,0-5.41514,0.287192-8,0.8125v6.1875c-3.47484,0.838872-6.7198,2.18462-9.6875,4l-4.375-4.375c-2.24264,1.48612-4.29226,3.22977-6.1875,5.125s-3.63888,3.94486-5.125,6.1875l4.375,4.375c-1.81538,2.9677-3.16112,6.21265-4,9.6875h-6.1875c-0.5253,2.58486-0.8125,5.26083-0.8125,8s0.2872,5.41515,0.8125,8h6.1875c0.83888,3.47485,2.18462,6.7198,4,9.6875l-4.375,4.375c1.48612,2.24264,3.22976,4.29227,5.125,6.1875s3.94486,3.63888,6.1875,5.125l4.375-4.375c2.9677,1.81538,6.21266,3.16113,9.6875,4v6.1875c2.58486,0.525308,5.26082,0.8125,8,0.8125,2.73916,0,5.41514-0.287192,8-0.8125v-6.1875c3.47484-0.838872,6.7198-2.18462,9.6875-4l4.375,4.375c2.24264-1.48612,4.29226-3.22977,6.1875-5.125s3.63888-3.94486,5.125-6.1875l-4.375-4.375c1.81538-2.9677,3.16112-6.21266,4-9.6875h6.1875c0.5253-2.58485,0.8125-5.26083,0.8125-8s-0.2872-5.41515-0.8125-8h-6.1875c-0.83888-3.47485-2.18462-6.7198-4-9.6875l4.375-4.375c-1.48612-2.24264-3.22976-4.29227-5.125-6.1875s-3.94486-3.63888-6.1875-5.125l-4.375,4.375c-2.9677-1.81538-6.21266-3.16113-9.6875-4v-6.1875c-2.58486-0.525308-5.26084-0.8125-8-0.8125z" stroke-dashoffset="162" stroke="#666" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="7.68713093" fill="none"/>
</g>
</g>
</g>
</svg>
Из того, что я прочитал в спецификации, я бы сказал, что применяемые матрицы преобразования
1.9522781 0 4.6434311
0 1.9522781 -1008.1558
0 0 1
а также
0.65043772 0 -143.67477
0 0.65043772 980.4256
0 0 1
Применяются ли они к координате xyz (-9.9178912,-891.57237,0)
после трансформационного преобразования?
Я предполагаю, что правильный анализ выше даст мне верхнюю левую точку описанного пути или, возможно, координату для первой ручки. После этого нужно ли анализировать путь, чтобы определить ограничивающую рамку и, следовательно, центр (поскольку речь идет о несколько круглом объекте) пути?
Является ли это уроком в том, чтобы не пытаться вручную делать анимацию на свободно созданных фигурах?
Inkscape Prefs > Transforms > Store transformation: Optimized
. - person Erik Dahlström   schedule 12.04.2011