旋转自定义角度的点矩阵

时间:2015-06-10 19:05:39

标签: c matrix-multiplication

我想制作点矩阵并将它们旋转为自定义角度 当我进入所需的角度时,我得到一堆0,无法弄清楚原因 可能是一个非常简单的错误,我对C语言编程有点新意,试图学习。

这是我的代码:

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <math.h>

int main(){
double pi = 3.14159265;
double rot[2][2], obj[2][10], obj2[2][10];
int a, c, d, i, j;
double x,y, sum=0;
double element = 0;

printf("Enter the number of columns of the matrix:\n");
scanf("%d", &a);

printf("Enter the elements of the matrix:\n");

for (c = 0; c < 2; c++){
    for (d = 0; d < a; d++){
        scanf("%lf", &obj[c][d]);
    }
}

printf("Enter the desired clockwise rotation angle:\n");
scanf("%lf", &x);
if ((int)x > 360){
    x = (int)x % 360;
}
if ((int)x < 0){
    x = 360 + x;
}

y = (pi / 180) * x;

rot[0][0] = cos(y);
rot[0][1] = sin(y);
rot[1][0] = -sin(y);
rot[1][1] = cos(y);


for (c = 0; c < 2; c++){
    for (d = 0; d < a; d++){
        for (i = 0; i < 2; i++){
            sum += rot[c][i] * obj[i][d];
        }
        obj2[c][d] = sum;
        sum = 0;
    }
}

printf("Rotated object in matrix form:\n");
for (c = 0; c < 2; c++){
    for (d = 0; d < a; d++){
        printf("%f\t", obj2[c][d]);
    }
    printf("\n");
}

system("PAUSE");
return 0;
}  

接受矩阵字段中的值时出现问题,几乎所有值都很混乱。还有&amp;在printf函数中,所以它打印错误的东西。现在全部解决了,调整了一些输出看起来更好但现在它是一个正常运行的代码。

编辑:修复printf后,我在调试后得到http://prntscr.com/7fgq7m 编辑2:输入值正常工作,现在将使用sin()和cos()部分来查看是否有效。

最终编辑:对于我计划的价值观,一切顺利进行,会与朋友进行更多测试,但看起来不错。
谢谢大家的帮助,非常感谢。

2 个答案:

答案 0 :(得分:0)

从此行中删除.,使其显示为

scanf("%lf", &x);

如果您打印输入值,将显示哪个错误。

另外,我发现你在检查输入值时遇到了麻烦,但sin()cos()只能通过愚蠢的极端输入失败。

另一点,fflush(stdin)是实现定义的,通常不是必需的。

更新这是一个错误

for (d = 0; d < a; c++)

应该是

for (d = 0; d < a; d++)

答案 1 :(得分:0)

scanf("%.lf", &obj[c][d]);

这是错的。 “%.lf”没有这样的说明符。对于double类型值,它必须是“%lf”。

此外,您正在使用fflush(stdin);,这是不正确的刷新标准输入缓冲区,并且根据标准(C11 7.21.5.2)它是未定义的行为。 (okey编译器支持它,但错误)。

您可以使用自己喜欢的功能;

void FlushStdin(void)
{
     int ch;    
     while((ch = getchar()) != '\n' && ch != EOF )
          ;
}