Fichier:Lemoine Hexagon.svg
Taille de cet aperçu PNG pour ce fichier SVG : 600 × 600 pixels. Autres résolutions : 240 × 240 pixels | 480 × 480 pixels | 768 × 768 pixels | 1 024 × 1 024 pixels | 2 048 × 2 048 pixels.
Fichier d’origine (Fichier SVG, nominalement de 800 × 800 pixels, taille : 2 kio)
Ce fichier et sa description proviennent de Wikimedia Commons.
Description
DescriptionLemoine Hexagon.svg |
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 :
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.http://www.gnu.org/copyleft/fdl.htmlGFDLGNU Free Documentation Licensetruetrue |
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éments décrits dans ce fichier
dépeint
Valeur sans élément de Wikidata
9 juillet 2008
Historique du fichier
Cliquer sur une date et heure pour voir le fichier tel qu'il était à ce moment-là.
Date et heure | Vignette | Dimensions | Utilisateur | Commentaire | |
---|---|---|---|---|---|
actuel | 9 juillet 2008 à 10:32 | 800 × 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}} |
Utilisation du fichier
La page suivante utilise ce fichier :
Usage global du fichier
Les autres wikis suivants utilisent ce fichier :
- Utilisation sur en.wikipedia.org
- Utilisation sur en.wiktionary.org
- Utilisation sur ru.wikipedia.org
Ce document provient de « https://fr.wikipedia.org/wiki/Fichier:Lemoine_Hexagon.svg ».