2012-06-16 3 views
4

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

Это движение можно легко показать, таким образом, как эта рисованной GIF:
enter image description here

Но как я могу achive такой взгляд простыми средствами в SVG? Тем более, что это также имеет течь вокруг углов, то есть не требуется только линейное движение ...

Предпочтительно уже (полуавтоматический) creatable в Inkscape ...

+0

Не уверен относительно SVG, но http://nerget.com/fluidSim/this Моделирование динамики жидкости реализовано на JavaScript с использованием 'canvas'. Если вы посмотрите на исходный код, вам будет легко следовать. В нем говорится, что он основан на уравнениях Навье-Стокса. Вы также должны искать метод Lattice Boltzmann. Я не на это 100%, но я думаю, что решетка Больцмана может быть дискретным методом аппроксимации уравнения Навье-Стокса. – Joe

+0

@Joe: ссылка неверна: [здесь] (http://nerget.com/fluidSim/) исправление – CapelliC

+0

@Joe - спасибо за ссылку на эту отличную демонстрацию! Но мне жаль, что я должен сказать, что это даже близко не связано с моим вопросом :(Я палочку, чтобы отобразить «поддельное» движение, которое могло бы анимировать поток в трубах, например, по адресу http: //www.em-ebook- shop.com/lshop,showdetail,24648,d,1339931570-10245,technische_grafiken,050-rf-profi,3,Tshowrub--technische_grafiken,0.htm – Chris

ответ

2

ОК, теперь я нашел ответ на «первая» часть вопроса, то есть верхний «поток» :

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<svg 
    xmlns:svg="http://www.w3.org/2000/svg" 
    xmlns="http://www.w3.org/2000/svg" 
    version="1.1" 
    width="202" 
    height="32" 
    id="svg2"> 
    <g id="layer1"> 
    <path 
     d="m 1,16 200,0" 
     id="path1" 
     style="stroke:#000000;stroke-width:30" /> 
    <path 
     d="m 1,16 200,0" 
     id="path2" 
     style="stroke:#ff0000;stroke-width:20" /> 
    <path 
     d="m 1,16 200,0" 
     id="path3" 
     style="stroke:#000000;stroke-width:16;stroke-dasharray:48, 48;stroke-dashoffset:10.6" /> 
    </g> 
</svg> 

Это был создан в Inkscape (+ упрощения вручную впоследствии размещать только соответствующие вещи) только путем дублирования одной линии с различным ширины, очень большой (id=path1) в черном для окружающей среды, большой один (id=path2) для красной жидкости и небольшой пунктирный (id=path3), который будет использован для анимации позже.

Все, что осталось сделать, это изменить атрибут stroke-dashoffset с помощью JavaScript или анимации CSS, так как это приведет к перемещению маленьких полосок для указания потока. Например:

<style type="text/css"> 
     @keyframes move { 
     from { stroke-dashoffset: 0; } 
     to { stroke-dashoffset: 96; } 
     } 
     @-moz-keyframes move { 
     from { stroke-dashoffset: 0; } 
     to { stroke-dashoffset: 96; } 
     } 
     @-webkit-keyframes move { 
     from { stroke-dashoffset: 0; } 
     to { stroke-dashoffset: 96; } 
     } 
    </style> 

, а затем в <path id="path3"> элемента:

animation-duration: 3s; 
    -moz-animation-duration: 3s; 
    -webkit-animation-duration: 3s; 
    animation-name: move; 
    -moz-animation-name: move; 
    -webkit-animation-name: move; 
    animation-timing-function: linear; 
    -moz-animation-timing-function: linear; 
    -webkit-animation-timing-function: linear; 
    animation-iteration-count: infinite; 
    -moz-animation-iteration-count: infinite; 
    -webkit-animation-iteration-count: infinite; 

Примечание: путь может иметь любую форму, она не должна быть прямой :)

Нижний поток :
Используя идеи http://owl3d.com/svg/tubefy/articles/article3.html, я также нашел решение (лучше: обходное решение) для «нижнего потока». Идея состоит в том, чтобы просто клонировать путь несколько раз и использовать по-разному цветные штрихи, нарисованные друг над другом. Анимация идет, как указано выше. Оба они теперь можно увидеть по адресу: http://jsfiddle.net/pXkvD/2

+0

Вы можете добавить это как [jsfiddle] (http://jsfiddle.net/) - было бы интересно взглянуть! – halfer

+0

Вы правы, я добавил его сейчас по адресу http://jsfiddle.net/pXkvD/ – Chris

+0

Отличная работа. +2 – halfer

Смежные вопросы