given :
node1 in Pos1
node2 in Pos2
node3 in Pos3
Code: Select all
float distan1 =node1->getPosition().distance(node3->getPosition());
float distan2=node1->getPosition().distance(node2->getPosition());
Code: Select all
float distan1 =node1->getPosition().distance(node3->getPosition());
float distan2=node1->getPosition().distance(node2->getPosition());
Get a node1's position in nodeX's space (node 2 or node 3, whichever you are doing).
Code: Select all
distance=distan1-distan2
Ogre::Vector3 newpos=Ogre::Vector3(node1.getPosition().x+distance,node1.getPosition().y,node1.getPosition().z)
Code: Select all
void constrain_3d_fixed_dist(Vector3 &pos1, Vector3 &pos2, float desired_dist, float compensate1, float compensate2)
{
Vector3 delta = pos2 - pos1;
float deltalength = (float)sqrt(delta.x*delta.x+delta.y*delta.y+delta.z*delta.z);
if(deltalength > 0)
{
float diff = (deltalength - desired_dist) / deltalength;
pos1 += delta * compensate1 * diff;
pos2 -= delta * compensate2 * diff;
}
}
Code: Select all
float distan1 =node1->getPosition().distance(node3->getPosition());
float distan2=node1->getPosition().distance(node2->getPosition());
Vector3 pos1 = node1.getPosition();
Vector3 pos2 = node2.getPosition();
Vector3 pos3 = node3.getPosition();
for(int i=0;i<10;i++)
{
constrain_3d_fixed_dist(pos1, pos2, distanc2, 1.0, 0);
constrain_3d_fixed_dist(pos1, pos3, distanc2, 1.0, 0);
}
node1.setPosition(pos1);