Файл:Lemoine Hexagon.svg
Материал из Википедии — свободной энциклопедии
Перейти к навигации
Перейти к поиску
Размер этого PNG-превью для исходного SVG-файла: 600 × 600 пкс. Другие разрешения: 240 × 240 пкс | 480 × 480 пкс | 768 × 768 пкс | 1024 × 1024 пкс | 2048 × 2048 пкс.
Исходный файл (SVG-файл, номинально 800 × 800 пкс, размер файла: 2 КБ)
Этот файл находится на Викискладе. Сведения о нём показаны ниже.
Викисклад — централизованное хранилище для свободных файлов, используемых в проектах Викимедиа.
Сообщить об ошибке с файлом |
Краткое описание
ОписаниеLemoine Hexagon.svg |
English: Lemoine Hexagon and its construction |
Дата | |
Источник | Собственная работа |
Автор | 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);
}
Лицензирование
Claudio Rocchini, владелец авторских прав на это произведение, добровольно публикует его на условиях следующих лицензий:
Разрешается копировать, распространять и/или изменять этот документ в соответствии с условиями GNU Free Documentation License версии 1.2 или более поздней, опубликованной Фондом свободного программного обеспечения, без неизменяемых разделов, без текстов, помещаемых на первой и последней обложке. Копия лицензии включена в раздел, озаглавленный GNU Free Documentation License.http://www.gnu.org/copyleft/fdl.htmlGFDLGNU Free Documentation Licensetruetrue |
Этот файл доступен по лицензии Creative Commons Attribution 3.0 Unported
Атрибуция: Claudio Rocchini
- Вы можете свободно:
- делиться произведением – копировать, распространять и передавать данное произведение
- создавать производные – переделывать данное произведение
- При соблюдении следующих условий:
- атрибуция – Вы должны указать авторство, предоставить ссылку на лицензию и указать, внёс ли автор какие-либо изменения. Это можно сделать любым разумным способом, но не создавая впечатление, что лицензиат поддерживает вас или использование вами данного произведения.
Вы можете выбрать любую из этих лицензий.
Элементы, изображённые на этом файле
изображённый объект
У этого свойства есть некоторое значение без элемента в
9 июля 2008
История файла
Нажмите на дату/время, чтобы посмотреть файл, который был загружен в тот момент.
Дата/время | Миниатюра | Размеры | Участник | Примечание | |
---|---|---|---|---|---|
текущий | 08:32, 9 июля 2008 | 800 × 800 (2 КБ) | 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}} |
Использование файла
Следующая страница использует этот файл:
Глобальное использование файла
Данный файл используется в следующих вики:
- Использование в en.wikipedia.org
- Использование в en.wiktionary.org
- Использование в fr.wikipedia.org