Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Графика С++.doc
Скачиваний:
3
Добавлен:
28.08.2019
Размер:
902.66 Кб
Скачать

Пример программы «Олимпийские кольца»

Текст программы:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Canvas->Pen->Width=1;

Canvas->Pen->Color=clBlack;

Canvas->Brush->Color =clCream;

Canvas->Rectangle(30,30,700,500);

Canvas->Pen->Width=5;

Canvas->Brush-> Style=bsClear;

Canvas->Pen->Color=clBlue;

Canvas->Ellipse(150,140,310,300);

Canvas->Pen->Color=clBlack;

Canvas->Ellipse(270,140,430,300);

Canvas->Pen->Color=clRed;

Canvas->Ellipse(380,140,540,300);

Canvas->Pen->Color=clYellow;

Canvas->Ellipse(210,230,370,390);

Canvas->Pen->Color=clGreen;

Canvas->Ellipse(330,230,490,390);

}

struct point // структура из координат x,y

{ int x,y;

};

point l;

enum pos {h,v,left,right,up,down}; // переключатель: горизинтально, вертикально,

//влево, вправо, сверху, внизу

TCanvas *t; // поверхность холста - указатель t

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

t=Image1->Canvas; // поверхность рисунка (холст) - Image1->Canvas

}

//---------------------------------------------------------------------------

//подпрограмма передачи координаты x,y переменной структуры l

void set(int x, int y)

{ l.x = x;

l.y = y;

}

void set(point p)

{

l.x = p.x;

l.y = p.y;

}

// треугольник вправо

void triangle1(int x,int y)

{

t->MoveTo(x+20,y+8);

t->LineTo(x+20,y+18);

t->MoveTo(x+20,y+8);

t->LineTo(x+29,y+14);

t->MoveTo(x+29,y+14);

t->LineTo(x+20,y+18);

}

// треугольник вверх

void triangle(int x,int y)

{

t->MoveTo(x+20,y+8);

t->LineTo(x+15,y+18);

t->MoveTo(x+20,y+8);

t->LineTo(x+25,y+18);

t->MoveTo(x+15,y+18);

t->LineTo(x+25,y+18);

}

//антенна

void A(int x, int y)

{

t->MoveTo(x+20,y+8);

t->LineTo(x+20,y+28);

t->MoveTo(x+20,y+18);

t->LineTo(x+30,y+8);

t->MoveTo(x+20,y+18);

t->LineTo(x+10,y+8);

}

// транзистор

void tr(int x, int y)

{

t->MoveTo(x,y+26);

t->LineTo(x+24,y+26);

t->MoveTo(x+24,y+13);

t->LineTo(x+24,y+40);

t->MoveTo(x+24,y+25);

t->LineTo(x+40,y+15);

t->MoveTo(x+24,y+27);

t->LineTo(x+34,y+34);

//стрелка

t->MoveTo(x+40,y+40);

t->LineTo(x+29,y+36);

t->MoveTo(x+40,y+40);

t->LineTo(x+35,y+30);

t->MoveTo(x+35,y+30);

t->LineTo(x+29,y+36);

}

// подпрограмма изображения точки соединения (закрашенный круг)

void kf(void)

{

t->Brush->Color=clBlack;

t->Ellipse(l.x-3,l.y-3,l.x+3,l.y+3);

t->FloodFill(l.x,l.y,clBlack,fsBorder);

t->Brush->Style=bsClear;

}

// подпрограмма изображения линий соединений: горизонтальных и вертикальных

void q(int len,pos q)

{

t->MoveTo(l.x,l.y); //установить начало линии

if(q){

t->LineTo(l.x,l.y+len); // линия вертикальная

l.y+=len;

}else{

t->LineTo(l.x+len,l.y); // линия горизонтальная

l.x+=len;

}

}

// резистор: вертикальный или горизонтальный(с надписью)

void R(pos q,String s,pos p){

if(q){

t->Rectangle(l.x-7,l.y,l.x+7,l.y+40); // резистор вертикальный

switch(p){

case left:t->TextOutA(l.x-6-s.Length()*7,l.y+15,s);break; // надпись слева

case right:t->TextOutA(l.x+10,l.y+15,s);break; // надпись справа

}

l.y = l.y+40;

}else{

t->Rectangle(l.x,l.y-7,l.x+40,l.y+7); // резистор горизонтальный

switch(p){

case up:t->TextOutA(l.x+12,l.y-20,s);break; // надпись над элементом

case down:t->TextOutA(l.x+2,l.y+8,s);break; // надпись под элементом

}

l.x+=+40;

}

}

// конденсатор (емкость) : вертикальный или горизонтальный(с надписью)

void C(pos q,String s,pos p){

if(q){ // конденсатор для вертикальной линии

t->MoveTo(l.x-12,l.y);

t->LineTo(l.x+12,l.y);

t->MoveTo(l.x-12,l.y+5);

t->LineTo(l.x+12,l.y+5);

switch(p){

case left:t->TextOutA(l.x-7-s.Length()*10,l.y+2,s);break; // надпись слева

case right:t->TextOutA(l.x+15,l.y+0,s);break; // надпись справа

}

l.y += 5;

}else{ // конденсатор для горизонтальной линии

t->MoveTo(l.x,l.y-12);

t->LineTo(l.x,l.y+12);

t->MoveTo(l.x+5,l.y-12);

t->LineTo(l.x+5,l.y+12);

switch(p){

case up:t->TextOutA(l.x+2,l.y-24,s);break; // надпись над элементом

case down:t->TextOutA(l.x-2,l.y+12,s);break; // надпись под элементом

}

l.x += 5;

}

}

// индуктивность: вертикальная или горизонтальная (с надписью)

void L(pos q,String s,pos p){

if(q){ // индуктивность горизонтальная

for (int i=0;i<3;i++)

t->Arc(l.x-4,l.y+i*10,l.x+4,l.y+i*10+10,l.x,l.y+i*10+10,l.x,l.y+i*10);

switch(p){

case left:t->TextOutA(l.x-2-s.Length()*6,l.y+3,s);break; // надпись слева

case right:t->TextOutA(l.x+8,l.y-10,s);break; // надпись справа

}

l.y += 30;

}else{ // индуктивность вертикальная

for (int i=0;i<3;i++)

t->Arc(l.x+i*10,l.y-4,l.x+i*10+10,l.y+5,l.x+i*10+10,l.y,l.x+i*10,l.y);

switch(p){

case up:t->TextOutA(l.x+8,l.y-20,s);break; // надпись над элементом

case down:t->TextOutA(l.x+8,l.y+6,s);break; // надпись под элементом

}

l.x += 30;

}

}

// текст

void text (int x, int y,String s)

{

t->TextOutA(l.x,l.y,s);

}

void __fastcall TForm1::Button1Click(TObject *Sender)

{

point s0,s1,s2,s3,s4,s5,s6;

triangle(300,50);

set(320,69);q(15,v);

R(v,"2.2K",right); q(10,v);kf();q(20,v);kf();s0=l;

q(30,h);kf();s1=l;

q(20,h); C(h,"10мк",up); q(30,h);

R(h,"400...680",down); q(25,h);

triangle1(450,141.5);

set(s1);q(20,v);C(v,"12*",right); q(20,v);kf();

q(20,v); C(v,"18",right); q(19,v);q(-35,h);

set(s0);q(7,v);L(v,"9вит",left); q(7,v);kf();s2=l;

q(30,h);

set(240,90);q(20,h); set(250,90); q(18,v);

C(v,"10n",right); q(20,v);kf(); s3=l;q(70,h);

set(s3); q(15,v);R(v,"100K*",left);q(10,v);kf();s4=l;

q(20,h);C(h,"50мк",up); q(20,h); q(45,v); q(25,h);kf(); s6=l;

q(15,v);R(v,"100",left);q(25,v);q(-10,h); q(20,h);

A(160,130); set(180,145);q(20,v); C(v,"12",left); q(20,v); kf();s5=l;

q(10,h); q(7,v); L(v,"5вит",right); q(7,v); q(-10,h);

set(s5);q(-10,h); q(20,v);C(v,"27",left); q(19,v);

q(10,h);q(15,v);q(-10,h);q(20,h);

set(175,255); q(10,h);

set(192,221);q(20,h);C(h,"50мк",down); q(80,h); tr(280,195);

set(s2); q(13,v); set(s6); q(-9,v);

set(s4);q(24,v);kf();

//подписи :

set(200,270);text (200,270,"P,1991.12.60");

set(360,240);text (360,240,"KT315Б");

set(480,150);text (480,150,"к УЗЧ");

set(310,40);text (310,40,"+3B");

set(205,208);text (205,208,"+");

set(260,185);text (205,208,"+");

}