You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
La structure Vector2d représente une direction et une magnitude dans l'espace 2D (plan XY). Elle est utilisée pour les calculs géométriques planaires, les transformations 2D et les opérations qui ne nécessitent pas de composante Z.
Namespace
Autodesk.AutoCAD.Geometry
Propriétés Clés
Propriété
Type
Description
X
double
Obtient la composante X
Y
double
Obtient la composante Y
Length
double
Obtient la longueur (magnitude) du vecteur
LengthSqrd
double
Obtient la longueur au carré (plus rapide que Length)
Angle
double
Obtient l'angle depuis l'axe X (radians)
XAxis
Vector2d (static)
Obtient le vecteur unitaire (1, 0)
YAxis
Vector2d (static)
Obtient le vecteur unitaire (0, 1)
Méthodes Clés
Méthode
Type de Retour
Description
GetNormal()
Vector2d
Retourne le vecteur unitaire normalisé
DotProduct(Vector2d)
double
Calcule le produit scalaire avec un autre vecteur
GetAngleTo(Vector2d)
double
Obtient l'angle vers un autre vecteur (radians)
TransformBy(Matrix2d)
Vector2d
Transforme le vecteur par une matrice 2D
RotateBy(double)
Vector2d
Effectue une rotation du vecteur par un angle
Negate()
Vector2d
Retourne le vecteur inversé
MultiplyBy(double)
Vector2d
Multiplie le vecteur par un scalaire
IsParallelTo(Vector2d)
bool
Vérifie si parallèle à un autre vecteur
IsPerpendicularTo(Vector2d)
bool
Vérifie si perpendiculaire à un autre vecteur
IsCodirectionalTo(Vector2d)
bool
Vérifie si pointe dans la même direction
IsEqualTo(Vector2d)
bool
Vérifie l'égalité avec la tolérance par défaut
IsEqualTo(Vector2d, Tolerance)
bool
Vérifie l'égalité avec une tolérance personnalisée
Surcharges d'Opérateurs
Opérateur
Description
+
Addition de vecteurs
-
Soustraction de vecteurs
*
Multiplication scalaire
/
Division scalaire
==
Comparaison d'égalité
!=
Comparaison d'inégalité
Exemples de Code
Exemple 1: Créer et Utiliser des Vecteurs 2D
// Créer des vecteurs 2DVector2dvec1=newVector2d(3,4);Vector2dvec2=newVector2d(1,0);// Obtenir les propriétésdoublelength=vec1.Length;// 5.0doubleangle=vec1.Angle;// Angle depuis l'axe X en radiansdoubleangleDegrees=angle*(180.0/Math.PI);// NormaliserVector2dunitVec=vec1.GetNormal();// (0.6, 0.8)// Utiliser les axes prédéfinisVector2dxAxis=Vector2d.XAxis;// (1, 0)Vector2dyAxis=Vector2d.YAxis;// (0, 1)ed.WriteMessage($"\nVecteur : ({vec1.X}, {vec1.Y})");ed.WriteMessage($"\nLongueur : {length:F2}");ed.WriteMessage($"\nAngle : {angleDegrees:F2}°");ed.WriteMessage($"\nVecteur unitaire : ({unitVec.X:F2}, {unitVec.Y:F2})");
Vector2dv1=newVector2d(1,0);// Axe XVector2dv2=newVector2d(1,1);// 45° de l'axe XVector2dv3=newVector2d(0,1);// Axe Y// Obtenir les anglesdoubleangle12=v1.GetAngleTo(v2);// π/4 (45°)doubleangle13=v1.GetAngleTo(v3);// π/2 (90°)// Convertir en degrésdoubledegrees12=angle12*(180.0/Math.PI);doubledegrees13=angle13*(180.0/Math.PI);ed.WriteMessage($"\nAngle v1 vers v2 : {degrees12:F2}°");ed.WriteMessage($"\nAngle v1 vers v3 : {degrees13:F2}°");// Obtenir la propriété angle (depuis l'axe X)doublev2Angle=v2.Angle*(180.0/Math.PI);ed.WriteMessage($"\nAngle de v2 depuis l'axe X : {v2Angle:F2}°");
Exemple 4: Rotation
Vector2dvec=newVector2d(10,0);// Rotation de 45° dans le sens antihorairedoubleangle=Math.PI/4;Vector2drotated=vec.RotateBy(angle);// Rotation de 90° pour obtenir la perpendiculaireVector2dperpendicular=vec.RotateBy(Math.PI/2);ed.WriteMessage($"\nOriginal : ({vec.X:F2}, {vec.Y:F2})");ed.WriteMessage($"\nRotation 45° : ({rotated.X:F2}, {rotated.Y:F2})");ed.WriteMessage($"\nPerpendiculaire : ({perpendicular.X:F2}, {perpendicular.Y:F2})");// Créer un motif circulairefor(inti=0;i<8;i++){doubleang=(i*2*Math.PI)/8;Vector2drotVec=vec.RotateBy(ang);ed.WriteMessage($"\nPoint {i} : ({rotVec.X:F2}, {rotVec.Y:F2})");}
Exemple 5: Produit Scalaire et Perpendicularité
Vector2dv1=newVector2d(3,4);Vector2dv2=newVector2d(-4,3);// Perpendiculaire à v1// Produit scalairedoubledot=v1.DotProduct(v2);// Devrait être 0 pour perpendiculaire// Vérifier les relationsboolisPerp=v1.IsPerpendicularTo(v2);boolisParallel=v1.IsParallelTo(v2);ed.WriteMessage($"\nProduit scalaire : {dot:F6}");ed.WriteMessage($"\nPerpendiculaire : {isPerp}");ed.WriteMessage($"\nParallèle : {isParallel}");// Utilisation pratique : vérifier si les vecteurs sont perpendiculairesVector2da=newVector2d(1,2);Vector2db=newVector2d(-2,1);doubledotAB=a.DotProduct(b);ed.WriteMessage($"\nVecteurs perpendiculaires : {Math.Abs(dotAB)<0.001}");
Exemple 6: Projection 2D
// Projeter le vecteur A sur le vecteur BVector2dvecA=newVector2d(5,3);Vector2dvecB=newVector2d(1,0);// Axe X// Formule de projection : proj_B(A) = (A · B / |B|²) * BdoubledotProduct=vecA.DotProduct(vecB);doublelengthSqrd=vecB.LengthSqrd;Vector2dprojection=vecB*(dotProduct/lengthSqrd);// Composante perpendiculaireVector2dperpComponent=vecA-projection;ed.WriteMessage($"\nVecteur A : ({vecA.X}, {vecA.Y})");ed.WriteMessage($"\nProjection sur l'axe X : ({projection.X:F2}, {projection.Y:F2})");ed.WriteMessage($"\nComposante perpendiculaire : ({perpComponent.X:F2}, {perpComponent.Y:F2})");
Exemple 7: Conversion entre 2D et 3D
// 2D vers 3DVector2dvec2d=newVector2d(5,3);Vector3dvec3d=newVector3d(vec2d.X,vec2d.Y,0);ed.WriteMessage($"\nVecteur 2D : ({vec2d.X}, {vec2d.Y})");ed.WriteMessage($"\nVecteur 3D : ({vec3d.X}, {vec3d.Y}, {vec3d.Z})");// 3D vers 2D (ignorer Z)Vector3dvec3dInput=newVector3d(10,20,30);Vector2dvec2dResult=newVector2d(vec3dInput.X,vec3dInput.Y);ed.WriteMessage($"\nEntrée 3D : ({vec3dInput.X}, {vec3dInput.Y}, {vec3dInput.Z})");ed.WriteMessage($"\nRésultat 2D : ({vec2dResult.X}, {vec2dResult.Y})");
Exemple 8: Créer un Décalage en 2D
// Créer un décalage perpendiculaire à la directionPoint2dstart=newPoint2d(0,0);Point2dend=newPoint2d(10,0);doubleoffsetDist=5.0;// Obtenir le vecteur de directionVector2ddirection=newVector2d(end.X-start.X,end.Y-start.Y);// Obtenir la perpendiculaire (rotation de 90°)Vector2dperpendicular=direction.RotateBy(Math.PI/2);Vector2doffsetVector=perpendicular.GetNormal()*offsetDist;// Calculer les points décalésPoint2doffsetStart=newPoint2d(start.X+offsetVector.X,start.Y+offsetVector.Y);Point2doffsetEnd=newPoint2d(end.X+offsetVector.X,end.Y+offsetVector.Y);ed.WriteMessage($"\nOriginal : ({start.X}, {start.Y}) à ({end.X}, {end.Y})");ed.WriteMessage($"\nDécalage : ({offsetStart.X:F2}, {offsetStart.Y:F2}) à ({offsetEnd.X:F2}, {offsetEnd.Y:F2})");
Vérifier le Côté du Point (Gauche/Droite de la Ligne)
Point2dlineStart=newPoint2d(0,0);Point2dlineEnd=newPoint2d(10,0);Point2dtestPoint=newPoint2d(5,5);Vector2dlineVec=newVector2d(lineEnd.X-lineStart.X,lineEnd.Y-lineStart.Y);Vector2dpointVec=newVector2d(testPoint.X-lineStart.X,testPoint.Y-lineStart.Y);// Produit vectoriel en 2D (composante Z)doublecross=lineVec.X*pointVec.Y-lineVec.Y*pointVec.X;if(cross>0)ed.WriteMessage("\nLe point est à gauche");elseif(cross<0)ed.WriteMessage("\nLe point est à droite");elseed.WriteMessage("\nLe point est sur la ligne");
Créer un Vecteur Unitaire depuis un Angle
doubleangleDegrees=45;doubleangleRadians=angleDegrees*(Math.PI/180.0);Vector2dunitVec=newVector2d(Math.Cos(angleRadians),Math.Sin(angleRadians));ed.WriteMessage($"\nVecteur unitaire à {angleDegrees}° : ({unitVec.X:F4}, {unitVec.Y:F4})");
Bonnes Pratiques
Utiliser pour Opérations 2D : Préférer Vector2d à Vector3d lors du travail dans le plan XY
Performance : Les opérations Vector2d sont plus rapides que Vector3d pour la géométrie planaire
Propriété Angle : Utiliser la propriété Angle pour obtenir la direction du vecteur depuis l'axe X
Normalisation : Toujours normaliser quand seule la direction est nécessaire
Tolérance : Utiliser l'égalité basée sur la tolérance pour les comparaisons en virgule flottante
Immutabilité : Vector2d est une structure ; les opérations retournent de nouveaux vecteurs
Conversion : Conversion facile vers/depuis Vector3d au besoin