我目前正在研究一个C程序,该程序从用户获取3(x,y)坐标(三角形)将点存储在2D数组中,并将原始点顺时针旋转90度并将这些新点存储在单独的阵列。
要旋转三角形,您必须:
示例:原点(8,5)将变为(5,-8)等。
这是我尝试过的一小部分
#include <stdio.h>
void clockwiseRotateTriangle(int oldtriangle[3][2], int newtriangle[3][2]);
int main (void)
{
int triangle[3][2];
int newtriangle[3][2];
//user inputs each point
printf("Enter point #1 as x and y:\n");
scanf("%d %d", &triangle[0][0],&triangle[0][1]);
printf("Enter point #2 as x and y:\n ");
scanf("%d %d",&triangle[1][0],&triangle[1][1]);
printf("Enter point #3 as x and y:\n ");
scanf("%d %d", &triangle[2][0],&triangle[2][1]);
printf("Starting Triangle: (%d,%d),(%d,%d),(%d,%d)\n",
triangle[0][0],triangle[0][1],
triangle[1][0],triangle[1][1],
triangle[2][0],triangle[2][1]);
clockwiseRotateTriangle(triangle,newtriangle);
printf("Rotated Triangle:(%d,%d),(%d,%d),(%d,%d)\n",
newtriangle[0][0],newtriangle[0][1],
newtriangle[1][0],newtriangle[1][1],
newtriangle[2][0],newtriangle[2][1]);
}
void clockwiseRotateTriangle(int triangle[3][2], int newtriangle[3][2])
{
triangle[0][0] = -1*newtriangle[0][1];
triangle[0][1] = newtriangle[0][0];
triangle[1][0] = -1*newtriangle[1][1];
triangle[1][1] = newtriangle[1][0];
triangle[2][0] = -1*newtriangle[2][1];
triangle[2][1] = newtriangle[2][0];
}
但输出与我不一致:
Enter point #1 as x and y:
2 7
Enter point #2 as x and y:
-3 4
Enter point #3 as x and y:
-1 0
Starting Triangle: (2,7),(-3,4),(-1,0)
Rotated Triangle:(1606416400,32767),(0,0),(0,0)
任何人都可以解释为什么我的旋转三角形如此不稳定吗?
答案 0 :(得分:1)
可能还有其他问题,但主要问题似乎是你在函数内部分配了错误的三角形变量,然后你正在打印未初始化的newtriangle
数组。此外,你否定y
而不是x
。
我认为应该是这样的:
void clockwiseRotateTriangle(int triangle[3][2], int newtriangle[3][2])
{
newtriangle[0][0] = triangle[0][1];
newtriangle[0][1] = -1*triangle[0][0];
newtriangle[1][0] = triangle[1][1];
newtriangle[1][1] = -1*triangle[1][0];
newtriangle[2][0] = triangle[2][1];
newtriangle[2][1] = -1*triangle[2][0];
}
给出了输出:
Starting Triangle: (2,7),(-3,4),(-1,0)
Rotated Triangle:(7,-2),(4,3),(0,1)
答案 1 :(得分:1)
主要原因是您在newtriangle
函数
clockwiseRotateTriangle
数组值
void clockwiseRotateTriangle(int triangle[3][2], int newtriangle[3][2])
{
triangle[0][0] = -1*newtriangle[0][1];
triangle[0][1] = newtriangle[0][0];
triangle[1][0] = -1*newtriangle[1][1];
triangle[1][1] = newtriangle[1][0];
triangle[2][0] = -1*newtriangle[2][1];
triangle[2][1] = newtriangle[2][0];
}
此处
newtriangle
数组未初始化,因此具有垃圾值 被分配到三角形......这就是你最终的原因 随机结果
我认为您想要的是另一种方式,即使用triangle
数组的值来获取newtriangle
函数中clockwiseRotateTriangle
数组的值
void clockwiseRotateTriangle(int triangle[3][2], int newtriangle[3][2])
{
newtriangle[0][0] = triangle[0][1];
newtriangle[0][1] = -1*triangle[0][0];
newtriangle[1][0] = triangle[1][1];
newtriangle[1][1] = -1*triangle[1][0];
newtriangle[2][0] = triangle[2][1];
newtriangle[2][1] = -1*triangle[2][0];
}
对代码进行上述更改后,输出符合要求:)
Enter point #1 as x and y:
8 5
Enter point #2 as x and y:
8 5
Enter point #3 as x and y:
8 5
Starting Triangle: (8,5),(8,5),(8,5)
Rotated Triangle:(5,-8),(5,-8),(5,-8)