« Programmation objet et géométrie/Points 3D avec CaRScript » : différence entre les versions

Contenu supprimé Contenu ajouté
Jcare (discussion | contributions)
Page créée avec « CaRMetal est un logiciel de géométrie plane. Néanmoins il permet de simuler la géométrie dans l'espace, hormis les problèmes d'incidence, il autorise par exemple la cr... »
(Aucune différence)

Version du 14 juillet 2010 à 17:35

CaRMetal est un logiciel de géométrie plane. Néanmoins il permet de simuler la géométrie dans l'espace, hormis les problèmes d'incidence, il autorise par exemple la création d'un point d'intersection de deux droites non coplanaires.

Même s'il est possible de créer un point dans l'espace en donnant ses trois coordonnées, ce point dans CaRMetal reste un objet 2D. CaRScript permet de s'affranchir de cette limitation en créant l'objet point3D.

// constructeur de l'objet point3D
function point3D(x,y,z,nom){
	// si le nom a été omis, un nom par défaut est attribué
	if(nom == undefined){
		nom = "Pt"+numPt; // numPt est une variable globale
		numPt++};
	this.CM = nom; // référence CaRMetal
	// coordonnées
	this.x = x;
	this.y = y;
	this.z = z;
	// pour conserver l'interactivité, les coordonnées doivent être stockées dans des expressions de CaRMetal
	this.xCM = "X"+nom; // dans CaRMetal l'expression XA désignera l'abscisse du point A
	var expx = Expression(this.xCM,x,-3,1);
	SetHide(expx,true);
	this.yCM = "Y"+nom;
	var expy = Expression(this.yCM,y,-3,0.5);
	SetHide(expy,true);
	this.zCM = "Z"+nom;
	var expz = Expression(this.zCM,z,-3,0);
	SetHide(expz,true);
	// création du point dans CaRMetal
	var pt = Point(nom, "x(O)+"+ this.xCM+"*(x(X)-x(O))+"+ this.yCM+"*(x(Y)-x(O))+"+ this.zCM+"*(x(Z)-x(O))","y(O)+"+ this.xCM+"*(y(X)-y(O))+"+ this.yCM+"*(y(Y)-y(O))+"+ this.zCM+"*(y(Z)-y(O))");
	// affichage des coordonnées à côté du nom
	SetAlias(pt, nom+ "(%"+ this.xCM+ "%,%"+ this.yCM+ "%,%"+ this.zCM+"%)");
}

Ci-dessous un exemple d'utilisation : le script crée deux points 3D, que l'on retrouve dans la feuille de dessin. Les coordonnées peuvent être modifiées dans CaRMetal par l'intermédiaire des expressions, qui peuvent également être transformées en curseur.

// exemple d'utilisation

// initialisation du compteur pour les points sans nom
var numPt = 1;
// création d'un point nommé A dans CaRMetal
var unPoint = new point3D(1,2,3,"A");
SetPointType("A","square");
SetShowName("A",true);
// création d'un point avec nom par défaut dans CaRMetal
var unAutrePoint = new point3D(-2,-1,0);
SetPointType(unAutrePoint.CM,"dcross");
SetShowName(unAutrePoint.CM,true);
// exemple de calcul qui peut être fait soit dans le script, soit dans une expression de CaRMetal
var s = Segment("A","Pt1");
SetAlias(s,"%sqrt((XA-XPt1)^2+(YA-YPt1)^2+(ZA-ZPt1)^2)%"); // distance APt1
SetShowName(s,true);