Координаты звезды

Ro_jA

Помогите по аналогии вычислить координаты звезды, пятиконечнойВ примере трапеция
//Координаты трапеции
void XYTrapeze (int &x1,int &x2,int &x3,int &x4,
                int &y1,int &y2,int &y3,int &y4)
{
    do
    {
       printf ("Введите координаты углов трапеции\n\
с условием x2>=x1 & x2<x3<x4 & y2>y1\n");
       printf ("Левый нижний(x1,y1):\n");
       printf ("x: ");
       scanf ("%d", &x1);
       printf ("y: ");
       scanf ("%d", &y1);
       printf ("Левый верхний(x2,y2):\n");
       printf ("x: ");
       scanf ("%d", &x2);
       printf ("y: ");
       scanf ("%d", &y2);
       printf ("Правый верхний(x3):\n");
       printf ("x: ");
       scanf ("%d", &x3);
       printf ("Правый нижний(x4):\n");
       printf ("x: ");
       scanf ("%d", &x4);
    }
    while (x1>x2&&x3>=x4);
    x1=Xc+x1*20;
    x2=Xc+x2*20;
    x4=Xc+x4*20;
    x3=Xc+x3*20;
    y1=Yc-y1*20;
    y2=Yc-y2*20;
    y3=y2;
    y4=y1;
}
 
//Рисование трапеции
void DrawTrapeze (int x1,int x2,int x3,int x4,
                  int y1,int y2,int y3,int y4)
{
    moveto (x1,y1);
    lineto (x2,y2);
    lineto (x3,y3);
    lineto (x4,y4);   
    lineto (x1,y1);     
}
 
int Rotate_x(int x,int y,int a)
{
    ****** R;
    R=ceil(Xc+(x-Xc)*cos(a*M_PI/180)-(y-Yc)*sin(a*M_PI/180));
    return int(R);
}
 
int Rotate_y(int x,int y,int a)
{
    ****** R;
    R=ceil(Yc+(x-Xc)*sin(a*M_PI/180)+(y-Yc)*cos(a*M_PI/180));
    return int(R);
}
2 ответа

Ro_jA

//Помогите по аналогии вычислить координаты звезды, пятиконечной.
#include <iostream>
#include <complex>
 
typedef ******                 T_coord;
typedef std::complex<T_coord>  T_versh;
 
void print_pentagram_coord
    (
        T_coord x,
        T_coord y,
        T_coord R
    )
{
    T_versh  verx_versh_ot_nach_coord = T_versh(0, R);
    T_coord  pentagram_ugol           = std::arg(verx_versh_ot_nach_coord) * 4.0 / 5.0;    
    T_versh  delitel                  = std::polar(1.0, pentagram_ugol); 
    T_versh  center                   = T_versh(x, y);
    const int total_pentagram_versh = 5;
    T_versh  cur_versh_ot_nach_coord = verx_versh_ot_nach_coord;
    std::cout << "Вершины пентаграммы при ее обходе по часовой стрелке, начиная с "
                 "верхней:"
              << std::endl;
    for(int versh_count = 1; versh_count <= total_pentagram_versh; ++versh_count)
    {
        std::cout << "вершина "
                  << versh_count
                  << ": "
                  << cur_versh_ot_nach_coord + center
                  << std::endl;
        cur_versh_ot_nach_coord /= delitel;
    }
}
 
int main()
{ 
    std::locale::global(std::locale(""));
    std::cout << "Введите координаты центра пентаграммы:"
              << std::endl;
    std::cout << "x = ";
    T_coord x;
    std::cin >> x;
    std::cout << "y = ";
    T_coord y;
    std::cin >> y;
    std::cout << "Введите радиус пентаграммы: "
              << std::endl;
    std::cout << "R = ";
    T_coord R;
    std::cin >> R;
    print_pentagram_coord(x, y, R);
    return 0;
}


Ro_jA

Спасибо, координаты известны, как сделать чтобы звезда еще и нарисовалась, как в примере. А вообще задача такая, но вместо трапеции звезда, как исправить, помогите
#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#define width 800 //ширина экрана
#define height 800 //высота экрана
#define Xc width/2 //центр оси X
#define Yc height/2 //центр оси Y
void XY (int x1, int x2,
int y1, int y2);
void XYStar (int &x1,int &x2,int &x3,int &x4,int &x5,
int &y1,int &y2,int &y3,int &y4,int &y5);
void DrawStar (int x1,int x2,int x3,int x4,int x5,
int y1,int y2,int y3,int y4,int y5);
void RotateTrapeze (int x1,int x2,int x3,int x4,
int y1,int y2,int y3,int y4,int angle);
void MoveTrapeze (int x1,int x2,int x3,int x4,int dx,
int y1,int y2,int y3,int y4,int dy);
void ZoomTrapeze (int x1,int x2,int x3,int x4,
int y1,int y2,int y3,int y4,int k);
 
int main (void)
{
int x1,x2,x3,x4,x5;
int y1,y2,y3,y4,y5;
int angle;
int dx,dy;
int k=2;
int choose;
initwindow (width,height);
XY (x1,x2,y1,y2);
srand(time(NULL));
XYStar (x1,x2,x3,x4,x5,y1,y2,y3,y4,y5);
setcolor (11);
DrawStar (x1,x2,x3,x4,x5,y1,y2,y3,y4,y5);
repeat: system("cls");
printf ("Выберите действие:\n\
1) Поворот на заданный угол;\n\
2) Перенос в случайное место;\n\
3) Масштабирование;\n\
4) Выход;\n");
enter: scanf ("%d",&choose);
switch (choose) 
{
case 1: {printf ("Введите угол поворота: ");
scanf ("%d",&angle); 
setcolor (2); 
RotateTrapeze (x1,x2,x3,x4,y1,y2,y3,y4,angle);
getch ();
setcolor (0);
RotateTrapeze (x1,x2,x3,x4,y1,y2,y3,y4,angle);
goto repeat;} 
case 2: {dx=rand()%200;
dy=rand()%200;
setcolor (2); 
MoveTrapeze (x1,x2,x3,x4,dx,y1,y2,y3,y4,dy);
getch ();
setcolor (0);
MoveTrapeze (x1,x2,x3,x4,dx,y1,y2,y3,y4,dy);
goto repeat;}
case 3: {k=rand()%4;
setcolor (2);
ZoomTrapeze (x1,x2,x3,x4,y1,y2,y3,y4,k);
getch ();
setcolor (0);
ZoomTrapeze (x1,x2,x3,x4,y1,y2,y3,y4,k);
goto repeat;}
case 4: closegraph ();break;
default: printf ("Введите число от 1 до 4:\n"); goto enter;
} 
}
 
//Система координат
void XY (int x1, int x2, int y1, int y2)
{
line (0,Yc,width,Yc);
line (Xc,0,Xc,height);
line (Xc,0,Xc-5,10);
line (Xc,0,Xc+5,10);
line (width,Yc,width-10,Yc-5);
line (width,Yc,width-10,Yc+5);
x1=Xc-5;
x2=Xc+5;
y1=20;
y2=20;
while (y1<height&&y2<height)
{
line (x1,y1,x2,y2);
y1+=20;
y2+=20;
}
x1=20;
x2=20;
y1=Yc-5;
y2=Yc+5;
while (x1<width&&x2<width)
{
line (x1,y1,x2,y2);
x1+=20;
x2+=20;
}
outtextxy (Xc+10,5,"Y");
outtextxy (width-15,Yc+10,"X");
outtextxy (Xc+10,Yc-30,"1");
outtextxy (Xc+18,Yc+5,"1");
}
 
//Координаты трапеции
void XYTrapeze (int &x1,int &x2,int &x3,int &x4,
                int &y1,int &y2,int &y3,int &y4)
{
    do
    {
       printf ("Введите координаты углов трапеции\n\
с условием x2>=x1 & x2<x3<x4 & y2>y1\n");
       printf ("Левый нижний(x1,y1):\n");
       printf ("x: ");
       scanf ("%d", &x1);
       printf ("y: ");
       scanf ("%d", &y1);
       printf ("Левый верхний(x2,y2):\n");
       printf ("x: ");
       scanf ("%d", &x2);
       printf ("y: ");
       scanf ("%d", &y2);
       printf ("Правый верхний(x3):\n");
       printf ("x: ");
       scanf ("%d", &x3);
       printf ("Правый нижний(x4):\n");
       printf ("x: ");
       scanf ("%d", &x4);
    }
    while (x1>x2&&x3>=x4);
    x1=Xc+x1*20;
    x2=Xc+x2*20;
    x4=Xc+x4*20;
    x3=Xc+x3*20;
    y1=Yc-y1*20;
    y2=Yc-y2*20;
    y3=y2;
    y4=y1;
}
 
//Рисование трапеции
void DrawTrapeze (int x1,int x2,int x3,int x4,
                  int y1,int y2,int y3,int y4)
{
    moveto (x1,y1);
    lineto (x2,y2);
    lineto (x3,y3);
    lineto (x4,y4);   
    lineto (x1,y1);     
}
 
int Rotate_x(int x,int y,int a)
{
    ****** R;
    R=ceil(Xc+(x-Xc)*cos(a*M_PI/180)-(y-Yc)*sin(a*M_PI/180));
    return int(R);
}
 
int Rotate_y(int x,int y,int a)
{
    ****** R;
    R=ceil(Yc+(x-Xc)*sin(a*M_PI/180)+(y-Yc)*cos(a*M_PI/180));
    return int(R);
} 
 
 
//Поворот
void RotateTrapeze (int x1,int x2,int x3,int x4,
int y1,int y2,int y3,int y4,int angle)
{
 
line (Rotate_x(x1,y1,angle),Rotate_y(x1,y1,angle),Rotate_x(x2,y2,angle),Rotate_y(x2,y2,angle));
line (Rotate_x(x2,y2,angle),Rotate_y(x2,y2,angle),Rotate_x(x3,y3,angle),Rotate_y(x3,y3,angle)); 
line (Rotate_x(x3,y3,angle),Rotate_y(x3,y3,angle),Rotate_x(x4,y4,angle),Rotate_y(x4,y4,angle));
line (Rotate_x(x4,y4,angle),Rotate_y(x4,y4,angle),Rotate_x(x1,y1,angle),Rotate_y(x1,y1,angle));
}
 
int Move_x (int x,int dx)
{
return (x+dx);
}
 
int Move_y (int y,int dy)
{
return (y+dy);
}
 
//Перенос
void MoveTrapeze (int x1,int x2,int x3,int x4,int dx,
int y1,int y2,int y3,int y4,int dy)
{
line (Move_x(x1,dx),Move_y(y1,dy),Move_x(x2,dx),Move_y(y2,dy));
line (Move_x(x2,dx),Move_y(y2,dy),Move_x(x3,dx),Move_y(y3,dy)); 
line (Move_x(x3,dx),Move_y(y3,dy),Move_x(x4,dx),Move_y(y4,dy));
line (Move_x(x4,dx),Move_y(y4,dy),Move_x(x1,dx),Move_y(y1,dy));
}
 
int Zoom_x (int x,int k)
{
x=(x-Xc)/20;
x*=k;
x=Xc+x*20;
return (x);
}
 
int Zoom_y (int y,int k)
{
y=((y-Yc)/20)*(-1);
y*=k;
y=Yc-y*20;
return (y);
}
 
//Масштабирование
void ZoomTrapeze (int x1,int x2,int x3,int x4,
int y1,int y2,int y3,int y4,int k)
{
line (Zoom_x(x1,k),Zoom_y(y1,k),Zoom_x(x2,k),Zoom_y(y2,k));
line (Zoom_x(x2,k),Zoom_y(y2,k),Zoom_x(x3,k),Zoom_y(y3,k)); 
line (Zoom_x(x3,k),Zoom_y(y3,k),Zoom_x(x4,k),Zoom_y(y4,k));
line (Zoom_x(x4,k),Zoom_y(y4,k),Zoom_x(x1,k),Zoom_y(y1,k));
}
Помогите пожалуйста, завтра надо хоть что-то показать