C程序中三角形的操作

时间:2016-06-19 15:46:51

标签: c function

我目前正在研究一个C程序,该程序从用户获取3(x,y)坐标(三角形)将点存储在2D数组中,并将原始点顺时针旋转90度并将这些新点存储在单独的阵列。

要旋转三角形,您必须:

  1. 切换x值的符号
  2. 交换x和y坐标
  3. 示例:原点(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) 
    

    任何人都可以解释为什么我的旋转三角形如此不稳定吗?

2 个答案:

答案 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)