1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
//C++ 3.1 Листинг #1 MS-DOS Рисование n-звезды #include <stdlib.h> #include <iostream.h> #include <graphics.h> //Для работы с графическими функциями #include <math.h> //Для работы с тригонометрическими функциями /*ФУНКЦИЯ ПОСТРОЕНИЯ ЗВЕЗДЫ*/ void star(float R,float r,float n) { float a=0; pointtype *p=new pointtype [n*2+1]; //Массив для хранения координат вершин звезды float x=getmaxx()/2; //Расчет центра по х float y=getmaxy()/2; //Расчет центра по y //Цикл расчета вершин звезды for (int i=1;i<n*2+2;i++) { if (!(i%2)) //При выполнении условия четности следующие формулы { p[i].x=x+r/2*cos(a*M_PI/180); p[i].y=y-r/2*sin(a*M_PI/180); } else //При невыполнении условия четности следующие формулы { p[i].x=x+R*cos(a*M_PI/180); p[i].y=y-R*sin(a*M_PI/180); } a=a+180/n; }//Завершаем построение звезды соединяя её окончание с начальной точкой p[n*2+1].x=p[1].x; p[n*2+1].y=p[1].y; moveto(p[1].x,p[1].y); //Последовательное соединение точек массива, хранящего вершины звезды for (i=1;i<n*2+2;i++) { lineto(p[i].x,p[i].y); } delete []p; //Освобождаем память } //Функция ввода двух радиусов и числа концов void input() { float R,r,n; //Внешний и внутренний радиусы cout<<"Внутренний радиус = ";cin>>r; cout<<"Внешний радиус = ";cin>>R; cout<<"Число концов (n) = ";cin>>n; star(R,r,n); //Построение звезды по радиусам } void main() { system("CLS");//ПОДГОТОВКА РАБОТЫ С ГРАФИКОЙ int gdriver = DETECT, gmode, errorcode; initgraph(&gdriver, &gmode, ""); input(); //Ввод параметров звезды с последующим её построением system("PAUSE"); return; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public void nzved(double rad, int n, int x, int y) { Graphics g = Graphics.FromImage(bmp); double a = 0, b = 3.14159265358979323846 / n,k=0.3; int x1=(x + (int)(rad * Math.Cos(a))), x2, y1=(y+(int)(rad*Math.Sin(a))), y2; for (int i = 0; i < n; i++) { a = a + b; y2=(y+(int)(k*rad*Math.Sin(a))); x2 = (x + (int)(k*rad * Math.Cos(a))); a = a + b; g.DrawLine(new Pen(Form1.CurColor, Form1.CurWidth), x1, y1, x2, y2); x1 = (x + (int)(rad * Math.Cos(a))); y1 = (y + (int)( rad * Math.Sin(a))); g.DrawLine(new Pen(Form1.CurColor, Form1.CurWidth), x1, y1, x2, y2); } |