아래 프로그램에서 삼각형을 45도 반대 방향으로 회전하려고합니다. 다각형은 어느 각도로 회전하고 다른 곳으로 옮겨졌습니다. 이 문제를 어떻게 해결할 수 있는지 알려 주시기 바랍니다.C - 그래픽, 다각형을 회전 할 수 없습니다
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
int main(void)
{
int poly[8], rpoly[8],angle;
int gd = DETECT, gm;
initgraph(&gd,&gm,"C:\\TC\\BGI");
printf("\n Enter co-ordinates for Triangle : \n\n");
printf("Vertex 1 (x,y) : ");
scanf("%d %d", &poly[0], &poly[1]);
printf("Vertex 2 (x,y) : ");
scanf("%d %d", &poly[2], &poly[3]);
printf("Vertex 3 (x,y) : ");
scanf("%d %d", &poly[4], &poly[5]);
poly[6] = poly[0];
poly[7] = poly[1];
setcolor(2);
drawpoly(4,poly);
angle = 45;
rpoly[0] = poly[0]*cos(angle) - poly[1]*sin(angle);
rpoly[1] = poly[0]*sin(angle) + poly[1]*cos(angle);
rpoly[2] = poly[2]*cos(angle) - poly[3]*sin(angle);
rpoly[3] = poly[2]*sin(angle) + poly[3]*cos(angle);
rpoly[4] = poly[4]*cos(angle) - poly[5]*sin(angle);
rpoly[5] = poly[4]*sin(angle) + poly[5]*cos(angle);
rpoly[6] = rpoly[0];
rpoly[7] = rpoly[1];
setcolor(4);
drawpoly(4,rpoly);
getch();
closegraph();
return 0;
}
출력 :
편집 1 : 빨간색 삼각형 (회전 후 즉 삼각형) 원래보다 더 큰 보이는 출력에서
.
새로운 코드
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
int main(void)
{
int poly[8], rpoly[8], angle, centroid_x, centroid_y,i;
int gd = DETECT, gm;
initgraph(&gd,&gm,"C:\\TC\\BGI");
printf("\n Enter co-ordinates for Triangle : \n\n");
printf("Vertex 1 (x,y) : ");
scanf("%d %d", &poly[0], &poly[1]);
printf("Vertex 2 (x,y) : ");
scanf("%d %d", &poly[2], &poly[3]);
printf("Vertex 3 (x,y) : ");
scanf("%d %d", &poly[4], &poly[5]);
poly[6] = poly[0];
poly[7] = poly[1];
setcolor(2);
drawpoly(4,poly);
angle = 45 * 2 * 3.14/360;
centroid_x = (poly[0] + poly[2] + poly[4])/3;
centroid_y = (poly[1] + poly[3] + poly[5])/3;
rpoly[0] = (poly[0] - centroid_x) * cos(angle) - (poly[1] - centroid_y) * sin(angle) + centroid_x;
rpoly[1] = (poly[0] - centroid_x) * sin(angle) - (poly[1] - centroid_y) * cos(angle) + centroid_y;
rpoly[2] = (poly[2] - centroid_x) * cos(angle) - (poly[3] - centroid_y) * sin(angle) + centroid_x;
rpoly[3] = (poly[2] - centroid_x) * sin(angle) - (poly[3] - centroid_y) * cos(angle) + centroid_y;
rpoly[4] = (poly[4] - centroid_x) * cos(angle) - (poly[5] - centroid_y) * sin(angle) + centroid_x;
rpoly[5] = (poly[4] - centroid_x) * sin(angle) - (poly[5] - centroid_y) * cos(angle) + centroid_y;
rpoly[6] = rpoly[0];
rpoly[7] = rpoly[1];
setcolor(4);
drawpoly(4,rpoly);
for(i=0;i<7;i++)
{printf("\n %d", &rpoly[i]);}
getch();
closegraph();
return 0;
}
출력 :
편집 2 :
코드 Y 수정 후 - 조건 :
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
int main(void)
{
int poly[8], rpoly[8], angle, centroid_x, centroid_y,i;
int gd = DETECT, gm;
initgraph(&gd,&gm,"C:\\TC\\BGI");
printf("\n Enter co-ordinates for Triangle : \n\n");
printf("Vertex 1 (x,y) : ");
scanf("%d %d", &poly[0], &poly[1]);
printf("Vertex 2 (x,y) : ");
scanf("%d %d", &poly[2], &poly[3]);
printf("Vertex 3 (x,y) : ");
scanf("%d %d", &poly[4], &poly[5]);
poly[6] = poly[0];
poly[7] = poly[1];
setcolor(2);
drawpoly(4,poly);
angle = 45 * 2 * 3.14/360;
centroid_x = (poly[0] + poly[2] + poly[4])/3;
centroid_y = (poly[1] + poly[3] + poly[5])/3;
rpoly[0] = (poly[0] - centroid_x) * cos(angle) - (poly[1] - centroid_y) * sin(angle) + centroid_x;
rpoly[1] = (poly[0] - centroid_x) * sin(angle) + (poly[1] - centroid_y) * cos(angle) + centroid_y;
rpoly[2] = (poly[2] - centroid_x) * cos(angle) - (poly[3] - centroid_y) * sin(angle) + centroid_x;
rpoly[3] = (poly[2] - centroid_x) * sin(angle) + (poly[3] - centroid_y) * cos(angle) + centroid_y;
rpoly[4] = (poly[4] - centroid_x) * cos(angle) - (poly[5] - centroid_y) * sin(angle) + centroid_x;
rpoly[5] = (poly[4] - centroid_x) * sin(angle) + (poly[5] - centroid_y) * cos(angle) + centroid_y;
rpoly[6] = rpoly[0];
rpoly[7] = rpoly[1];
setcolor(4);
drawpoly(4,rpoly);
// for(i=0;i<8;i++)
// {printf("\n %d", &rpoly[i]);}
getch();
closegraph();
return 0;
}
출력 :
을
센터에 대해 어떻게 회전합니까? –
M_PI는 무엇을 의미합니까? 그게 키워드 야? –
Failed_Noob, 폴 R은 이미 "... 먼저 다각형의 중심을 계산해야합니다."라고 말했습니다. [Wikipedia] (http://en.wikipedia.org/wiki/Centroid)에는 몇 가지 알고리즘이 나열되어 있습니다. 또는 간단한 삼각형의 경우 x = (Ax + Bx + Cx)/3, y = (Ay + By + Cy)/3을 사용할 수 있습니다. –