stepaside_1_00.x3d source
<?xml version="1.0" encoding="UTF-8"?>
<X3D>
<Scene>
<Viewpoint position='-0.3 -7.8 6.25' orientation='1 0 0 0.9' description='initial'/>
<NavigationInfo
type='
"EXAMINE"'
/>

<!-- Blue Cylinder -->
<Transform DEF='Blue-Tf'>
<Transform rotation='1 0 0 1.5708'>
<Shape>
<Appearance>
<Material diffuseColor='0 0 1'/>
</Appearance>
<Cylinder DEF='Cyl' radius='0.5' height='0.5'/>
</Shape>
</Transform>
<PlaneSensor DEF='PlS'/>
</Transform>

<ROUTE fromNode='PlS' fromField='translation_changed' toNode='Blue-Tf' toField='translation'/>

<!-- Red Cylinder -->
<Transform DEF='Red-Tf' translation='-2 0 0'>
<Transform rotation='1 0 0 1.5708'>
<Shape>
<Appearance>
<Material diffuseColor='1 0 0'/>
</Appearance>
<Cylinder USE='Cyl'/>
</Shape>
</Transform>
</Transform>

<!-- Green Cylinder -->
<Transform DEF='Green-Tf' translation='2 0 0'>
<Transform rotation='1 0 0 1.5708'>
<Shape>
<Appearance>
<Material diffuseColor='0 1 0'/>
</Appearance>
<Cylinder USE='Cyl'/>
</Shape>
</Transform>
</Transform>

<Script DEF='Sc' directOutput='TRUE'>
<field accessType='inputOnly' type='SFVec3f' name='translationBlue'/>
<field accessType='initializeOnly' type='SFNode' name='Red'>
<Transform USE='Red-Tf'/>
</field>
<field accessType='initializeOnly' type='SFNode' name='Green'>
<Transform USE='Green-Tf'/>
</field>
<![CDATA[ecmascript:
function translationBlue (bluePos) {

// 赤と緑の位置を得る。
var redPos = Red.translation;
var greenPos = Green.translation;

// 緑から赤、青から赤、青から緑のベクトルを得る。
var vecG2R = redPos.subtract(greenPos);
var vecB2R = redPos.subtract(bluePos);
var vecB2G = greenPos.subtract(bluePos);

// 緑を青から1(円柱の直径)離れた場所に置く。
greenPos = vecB2G.normalize().add(bluePos);

// 緑と赤、青と赤の距離が短いならば、赤を遠ざける。
if ( vecG2R.length() < 1.1 ) redPos = vecG2R.normalize().multiply(1.15).add(greenPos);
if ( vecB2R.length() < 1.1 ) redPos = vecB2R.normalize().multiply(1.15).add(bluePos);

// 赤をz軸方向に動かさないようにする。(偶に青と赤が重なると、赤がZ軸方向に動くため。)
redPos.z = 0;

// 赤と緑の新しい位置をセットする。
Red.translation = redPos;
Green.translation = greenPos;

}
]]>
</Script>
<ROUTE fromNode='Blue-Tf' fromField='translation' toNode='Sc' toField='translationBlue'/>
</Scene>
</X3D>