2009-08-12 8 views
2

Je dessine deux sphères en 3D WPF qui a des points comme Point3D (0,0,0) et Point3D (-1.0,1.0,2.0) avec le rayon est de 0,10calcul vectoriel 3D dans WPF

Maintenant, je veux pour dessiner un Cylindre joignant ces sphères, la seule chose que j'ai pour cela est le rayon 0.02. Je veux savoir comment calculer le point 3d, la hauteur, la direction etc pour ce cylindre.

J'ai essayé en trouvant les points de la sphère btw milieu, c'est placer le cylindre au milieu de ces deux sphères, mais pas dans la bonne direction. J'essaie de faire tourner en utilisant dans le code ci-dessous.

Vector3D v1 = new Vector3D(0, 0, 0); 
    Vector3D v2 = new Vector3D(1.0, -1.0, 2.0); 

    Vector3D center = v1+ v2/2; 
    Vector3D axis = Vector3D.CrossProduct(v1, v2); 
    double angle = Vector3D.AngleBetween(v1, v2); 
    AxisAngleRotation3D axisAngle = new AxisAngleRotation3D(axis, angle); 
    RotateTransform3D myRotateTransform = new RotateTransform3D(axisAngle, center); 
    center.X = myRotateTransform.CenterX; 
    center.Y = myRotateTransform.CenterY; 
    center.Z = myRotateTransform.CenterZ; 

mais le double angle = Vector3D.AngleBetween (v1, v2); ruselting NaN

Ce serait vraiment bien, si quelqu'un pouvait aider à faire cela. Merci d'avance.

+0

Je ne suis pas un mathématicien mais un vecteur défini comme (0, 0, 0) n'a pas de magnitude et une direction de "nulle part ou partout". Pour trouver l'angle entre deux vecteurs, ces deux vecteurs doivent définir une direction. Vous ne pourrez donc jamais trouver un angle entre un vecteur zéro et un autre vecteur. –

Répondre

1

Vous pouvez simplement utiliser un RotateTransform3D pour faire tourner le cylindre dans la direction requise.

Vous pouvez appliquer le fichier de transformation à l'une des deux propriétés here est une explication des options

+0

Salut Simon - Comment puis-je calculer une direction requise à partir de ces deux points de sphère? – SituStarz

+0

Vous voulez probablement créer la rotation avec un AxisAngleRotation3d qui décrit l'axe que vous voulez faire pivoter (cela déterminera la direction de la rotation) et l'angle de la rotation (qui est "à quelle distance" de cet axe l'objet est tourné) –

0

La direction dont vous avez besoin est le vecteur entre les centres des sphères:

direction.x = sphere1.Center.x - sphere2.Center.x; 
direction.y = sphere1.Center.y - sphere2.Center.y; 
direction.x = sphere1.Center.z - sphere2.Center.z; 

divisent ensuite ceux-ci par la longueur du vecteur pour obtenir un vecteur unitaire:

double length = Math.Sqrt(direction.x * direction.x + 
          direction.y * direction.y + 
          direction.z * direction.z); 

direction.x /= length; 
direction.y /= length; 
direction.z /= length; 

Ensuite, vous pouvez l'utiliser pour calculer votre matrice de rotation.

Questions connexes