ハプティック デバイスのシミュレーションを作成するために、chai-3d と opengl を使用しています。
中心に配置された球と、中心の球の周りに配置された別の小さな球を描画しました。15 度ごとに、中心の球に基づいて球が描画されます。以下のコードは中心の球を描画します。
cShapeSphere *sphere;
cShapeSphere* sphere2;
void sphere(void)
{
float r1=0.020;
float a=0.0;
float b=0.0;
float r2=r1/6;
float th=15;
double pi=3.14159265;
sphere =new cShapeSphere(r1);
world->addChild(sphere);
sphere->setPos(0,a,b);
//this will draw small sphere around the main sphere
for(int j=1;j<=24;j++)
{
sphere2 =new cShapeSphere(r2);
world->addChild(sphere2);
sphere2->setPos(0,a+(r1+r2)*cos(th*j*pi/180),b+(r1+r2)*sin(th*j*pi/180));
//this were i apply the force
double strength = pow((sphere2->getRadius() - length) * 8000,2);
force = (c_pos - spos) * strength;
//the calculated force is sent to haptic device
hapticDevice->setForce(force);
}
}
すべての小さい球に力を加えようとすると、15 度に配置された最初の小さい球でのみ力が検出されます。30 度から 360 度に配置された球には力を加えることができません。計算された力は触覚デバイスに送信されます。問題は球にあり、中心の球の周りに 24 個の小さな球が描かれています。24 個の球を描画するために使用した変数は sphere2 です。球体 1 から 24 までの異なる変数名を付けて球体を描画していると考えてみましょう。異なる変数を使用するため問題なく力を適用できますが、すべての球体の描画に同じ名前を使用すると、力が適用されます。最初の反復時のみ。力は、24 回の反復のうち、他の 23 回には適用されません。球の位置に沿って力を反復する必要があります。