Циклоида

17.06111.jpg

Построить циклоиду.

Чтобы нарисовать циклоиду, достаточно пройтись в цикле по формулам:

X = Int((R1 + R2) * Cos(R2 * T / R1) - R3 * Cos((R1 + R2) / R1 * T))
Y = Int((R1 + R2) * Sin(R2 * T / R1) - R3 * Sin((R1 + R2) / R1 * T))

Здесь R1 - радиус круга, по которому катится колесо, R2 - радиус колеса, катящегося по кругу, если с минусом, то внутри его и R3 - радиус, на котором лежит рисуемая точка на колесе. Т - счетчик цикла, он же полярный угол, на котором лежит центр колеса в данный момент.

#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <math.h>
#include <STDLIB.H>
#include <dos.h>
 
#define  K  0.45
 
 
void zicloida(int R1,int R2,int R3,float T );
char* s1_s2(char *s1,char *s2);
 
int main(){
    int R1,R2,R3;
    int gd ,gm;
 
    printf("Enter R1,R2,R3 :\n");  //R1 - радиус круга, по которому катится колесо, R2 - радиус колеса, катящегося по кругу,
    scanf("%d%d%d",&R1,&R2,&R3);   // если с минусом, то внутри его и R3 - радиус, на котором лежит рисуемая точка на колесе
 
 
    detectgraph(&gd, &gm);   //инициализация графики
    initgraph(&gd, &gm,"");
 
    zicloida(R1,R2,R3,0.0);
 
    getch();
    closegraph();
 
    return 0;
}
 
void zicloida(int r1,int r2,int r3,float t )
{
  int X,Y,xo,yo,R1,R2,R3,col;
  float T;
  char str1[20],str2[8],str3[8];
 
   randomize();
   xo = getmaxx()/2;
   yo = getmaxy()/2;
 
   for(R1 = r1 ; R1 <= 187 ; R1 += 5)
 
    for(R2 = r2 ; R2 <= 240 ; R2 += 5)
 
       for(R3 = r3; R3 <= 240 ; R3 += 5)
       {
	  outtextxy(1,1,"R1   R2   R3 ");      //вывод на экран значений R1, R2, R3
	  col =random(16) + 1;
	  itoa(R1, str1,10);
	  itoa(R2, str2,10);
	  itoa(R3, str3,10);
 
	  s1_s2(str1,"  ");
	  s1_s2(str1,str2);
	  s1_s2(str1,"   ");
	  s1_s2(str1,str3);
	  outtextxy(1,12,str1);
 
	  for(T = t ;T <= 600.0  ; T += 0.1){ // Т - счетчик цикла, он же полярный угол, на котором лежит центр колеса в данный момент
	     X = (R1 + R2) * cos(R2 * T / R1) - R3 * cos((R1 + R2) / R1 * T);  //формула построения циклоиды
	     Y = (R1 + R2) * sin(R2 * T / R1) - R3 * sin((R1 + R2) / R1 * T);
 
	     putpixel(X*K+xo,Y*K+yo,col);
 
	     if ( kbhit()) exit(1);
	 }
	    delay(50);
	    cleardevice();
 
     }
 }
 
 char* s1_s2(char *s1,char *s2){ //рассчет R2, R3
    int i,j;
 
 
    i=j=0;
    while (s1[i]!='\0')
	i++;
 
    while( (s1[i++]=s2[j++]) !='\0') ;
 
 
 
   return s1;
}

Ключевые слова: 
фрактал циклоида
ВложениеРазмер
cikloid.rar37.52 кб