Fichier d’origine(Fichier SVG, nominalement de 800 × 800 pixels, taille : 2 kio)

Ce fichier et sa description proviennent de Wikimedia Commons.

Description

Description
English: Lemoine Hexagon and its construction
Date
Source Travail personnel
Auteur Claudio Rocchini

Source Code

#include <stdio.h>
#include <math.h>

class point
{
public:
	double x,y;
	point() {}
	point( double nx, double ny ) : x(nx),y(ny) {}
	point  operator+ ( const point & p ) const { return point(x+p.x,y+p.y); }
	point  operator- ( const point & p ) const { return point(x-p.x,y-p.y); }
	point  operator* ( const double s  ) const { return point(x*s,y*s); }
	double operator* ( const point & p ) const { return x*p.x+p.y*y; }	// dot   product
	double operator^ ( const point & p ) const { return x*p.y-p.x*y; }	// cross product
	double angle() const { return atan2(y,x); }
	point& at_angle( double a ) { x = cos(a); y = sin(a); return *this; }
	point  perp() const { return point(y,-x); }
	double norm () const { return sqrt(x*x+y*y); }
	point& normalize() { double n = norm(); if(n!=0) { x/=n; y/=n; } return *this; }
};

class line
{
public:
	point orig;
	point dire;
	line() {}
	line( const point & no, const point & nd ) : orig(no),dire(nd) {}
	point param( double t ) const { return orig+dire*t; }
	point intersect( const line & l ) { return param( (l.dire^(orig-l.orig))/(dire^l.dire) ); }
};

void main()
{
	const double SX = 800; const double SY = 800;
	const double S  = 700; const double Q = 75;
	const int N = 3;
	int i;

	point tri[N] = { point(80,50) ,point(680,750), point(165,715) };
	line  median   [N];
	line  bisector [N];
	line  symmedian[N];
	point inter[N][2];

	for(i=0;i<N;++i) {
		median[i].orig = tri[i];
		median[i].dire = ((tri[(i+1)%N]+tri[(i+2)%N])*0.5 - tri[i]).normalize();

		bisector[i].orig = tri[i];
		bisector[i].dire = (tri[(i+1)%N]-tri[i]).normalize() + (tri[(i+2)%N]-tri[i]).normalize();
		bisector[i].dire.normalize();

		symmedian[i].orig = tri[i];
		symmedian[i].dire.at_angle( bisector[i].dire.angle()*2 - median[i].dire.angle() );
	}

	point symmedian_p = symmedian[0].intersect(symmedian[1]);

	for(i=0;i<N;++i) {
		line pa(symmedian_p, (tri[(i+2)%N]-tri[(i+1)%N]).normalize() );
		for(int j=0;j<2;++j) {
			line la(tri[i], (tri[(i+1+j)%N]-tri[i]).normalize() );
			inter[i][j] = pa.intersect(la);
		}
	}

	line l1( (inter[0][0]+inter[0][1])*0.5, (inter[0][0]-inter[0][1]).perp().normalize() );
	line l2( (inter[1][0]+inter[1][1])*0.5, (inter[1][0]-inter[1][1]).perp().normalize() );
	point  first_lem_c = l1.intersect(l2);
	double first_lem_r = (first_lem_c-inter[0][0]).norm();

	FILE * fp = fopen("c:\\temp\\Lemoine_Hexagon.svg","w");
	fprintf(fp,
		"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
		"<svg\n"
		"xmlns:svg=\"http://www.w3.org/2000/svg\"\n"
		"xmlns=\"http://www.w3.org/2000/svg\"\n"
		"version=\"1.0\"\n"
		"width=\"%g\"\n"
		"height=\"%g\"\n"
		"id=\"Lemoine_Hexagon\">\n"
		,SX,SY
	);

	fprintf(fp,"<g style=\"stroke:#0000C0;stroke-width:1;stroke-opacity:1;stroke-dasharray:6,4;fill:none\">\n");
	for(i=0;i<N;++i)
		fprintf(fp,
			"<line x1=\"%5.1lf\" y1=\"%5.1lf\" x2=\"%5.1lf\" y2=\"%5.1lf\"/>\n"
			,median[i].orig.x,median[i].orig.y
			,(median[i].orig+median[i].dire*S).x,(median[i].orig+median[i].dire*S).y
		);
	fprintf(fp,"</g>\n");

	fprintf(fp,"<g style=\"stroke:#00C000;stroke-width:1;stroke-opacity:1;stroke-dasharray:6,4;fill:none\">\n");
	for(i=0;i<N;++i)
		fprintf(fp,
			"<line x1=\"%5.1lf\" y1=\"%5.1lf\" x2=\"%5.1lf\" y2=\"%5.1lf\"/>\n"
			,bisector[i].orig.x,bisector[i].orig.y
			,(bisector[i].orig+bisector[i].dire*S).x,(bisector[i].orig+bisector[i].dire*S).y
		);
	fprintf(fp,"</g>\n");

	fprintf(fp,"<g style=\"stroke:#C00000;stroke-width:1;stroke-opacity:1;stroke-dasharray:6,4;fill:none\">\n");
	for(i=0;i<N;++i)
		fprintf(fp,
			"<line x1=\"%5.1lf\" y1=\"%5.1lf\" x2=\"%5.1lf\" y2=\"%5.1lf\"/>\n"
			,symmedian[i].orig.x,symmedian[i].orig.y
			,(symmedian[i].orig+symmedian[i].dire*S).x,(symmedian[i].orig+symmedian[i].dire*S).y
		);
	fprintf(fp,"</g>\n");

	fprintf(fp,"<g style=\"stroke:#C0C0C0;stroke-width:1;stroke-opacity:1;stroke-dasharray:6,4;fill:none\">\n");
	for(i=0;i<N;++i) {
		point d = (inter[i][1] - inter[i][0]).normalize();
		point p1 = inter[i][0] - d*Q; point p2 = inter[i][1] + d*Q;
		fprintf(fp,
			"<line x1=\"%5.1lf\" y1=\"%5.1lf\" x2=\"%5.1lf\" y2=\"%5.1lf\"/>\n"
			,p1.x, p1.y, p2.x, p2.y
		);
	}
	fprintf(fp,"</g>\n");

	fprintf(fp,"<g style=\"stroke:#00C0C0;stroke-width:1;stroke-opacity:1;fill:none\">\n");
	fprintf(fp,"<circle cx=\"%5.1lf\" cy=\"%5.1lf\" r=\"%5.1lf\"/>\n"
		,first_lem_c.x, first_lem_c.y
		,first_lem_r
	);
	fprintf(fp,"</g>\n");

	fprintf(fp,"<g style=\"stroke:#C000C0;stroke-width:2;stroke-opacity:1;fill:none\">\n");
	fprintf(fp,"<path d=\"");
	for(i=0;i<3;++i){
		if(i==0) fprintf(fp,"M ");
		else     fprintf(fp,"L ");
		fprintf(fp,"%5.1lf,%5.1lf ",tri[i].x,tri[i].y);
	}
	fprintf(fp,"z\"/>\n");
	fprintf(fp,"</g>\n");

	fprintf(fp,"<g style=\"stroke:#000000;stroke-width:2;stroke-opacity:1;fill:#C0C000;fill-opacity:0.5\">\n");
	fprintf(fp,"<path d=\"");
	for(i=0;i<3;++i) {
		for(int j=0;j<2;++j) {
			if(i==0 && j==0) fprintf(fp,"M ");
			else             fprintf(fp,"L ");
			fprintf(fp,"%5.1lf,%5.1lf ",inter[i][j]);
		}
	}
	fprintf(fp,"z\"/>\n");
	fprintf(fp,"</g>\n");

	fprintf(fp,"<g style=\"stroke:none;fill:#000000\">\n");
	fprintf(fp,"<circle cx=\"%5.1lf\" cy=\"%5.1lf\" r=\"%5.1lf\"/>\n"
		,symmedian_p.x, symmedian_p.y
		,6.0
	);
	for(i=0;i<N;++i) for(int j=0;j<2;++j)
			fprintf(fp,"<circle cx=\"%5.1lf\" cy=\"%5.1lf\" r=\"%5.1lf\"/>\n"
				,inter[i][j].x, inter[i][j].y
				,6.0
			);
	fprintf(fp,"</g>\n");

	fprintf(fp,"</svg>\n");
	fclose(fp);
}

Conditions d’utilisation

Claudio Rocchini, en tant que détenteur des droits d’auteur sur cette œuvre, la publie sous les licences suivantes :
GNU head Vous avez la permission de copier, distribuer et modifier ce document selon les termes de la GNU Free Documentation License version 1.2 ou toute version ultérieure publiée par la Free Software Foundation, sans sections inaltérables, sans texte de première page de couverture et sans texte de dernière page de couverture. Un exemplaire de la licence est inclus dans la section intitulée GNU Free Documentation License.
w:fr:Creative Commons
paternité
Ce fichier est disponible selon les termes de la licence Creative Commons Attribution 3.0 Non transposée.
Attribution: Claudio Rocchini
Vous êtes libre :
  • de partager – de copier, distribuer et transmettre cette œuvre
  • d’adapter – de modifier cette œuvre
Sous les conditions suivantes :
  • paternité – Vous devez donner les informations appropriées concernant l'auteur, fournir un lien vers la licence et indiquer si des modifications ont été faites. Vous pouvez faire cela par tout moyen raisonnable, mais en aucune façon suggérant que l’auteur vous soutient ou approuve l’utilisation que vous en faites.
Vous pouvez choisir l’une de ces licences.

Légendes

Ajoutez en une ligne la description de ce que représente ce fichier

Éléments décrits dans ce fichier

dépeint

Historique du fichier

Cliquer sur une date et heure pour voir le fichier tel qu'il était à ce moment-là.

Date et heureVignetteDimensionsUtilisateurCommentaire
actuel9 juillet 2008 à 10:32Vignette pour la version du 9 juillet 2008 à 10:32800 × 800 (2 kio)Rocchini{{Information |Description={{en|1=Lemoine Hexagon and its construction}} |Source=Opera creata dall'uploader (own work by uploader) |Author=Claudio Rocchini |Date=2008-07-09 |Permission= |other_versions= }} {{ImageUpload|full}}

La page suivante utilise ce fichier :

Usage global du fichier

Les autres wikis suivants utilisent ce fichier :