當前位置:首頁 » 編程語言 » c語言旋轉教程
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言旋轉教程

發布時間: 2023-01-05 09:02:15

c語言實現矩陣逆時針旋轉90度,代碼調試!!!!

  1. 局部變數數組a太大了,

    方法1:要麼把M改小,

#include <stdio.h>

#include <stdlib.h>

#define M 100


void Rotation(int a[M][M],int m,int n)

{

int tem[M][M];

int i,j,k = 0;


for(j=n-1;j>=0;j--)

{

for(i=0;i<m;i++)

tem[k][i] = a[i][j];

k++;

}


for(i=0;i<n;i++)

for(j=0;j<m;j++)

a[i][j] = tem[i][j];

}


int main()

{

int m,n;

int i,j;

int a[M][M];


scanf("%d %d",&m,&n);


for(i=0;i<m;i++)

for(j=0;j<n;j++)

scanf("%d",&a[i][j]);


Rotation(a,m,n);


for(i=0;i<n;i++)

{

for(j=0;j<m;j++)

printf("%d ",a[i][j]);

printf(" ");

}


return 0;

}

====================================================

2. 方法2:

要麼把a和tem改為全局變數

#define M 1000


int tem[M][M];

void Rotation(int a[M][M],int m,int n)

{

int i,j,k = 0;


for(j=n-1;j>=0;j--)

{

for(i=0;i<m;i++)

tem[k][i] = a[i][j];

k++;

}


for(i=0;i<n;i++)

for(j=0;j<m;j++)

a[i][j] = tem[i][j];

}

int a[M][M];

int main()

{

int m,n;

int i,j;


scanf("%d %d",&m,&n);


for(i=0;i<m;i++)

for(j=0;j<n;j++)

scanf("%d",&a[i][j]);


Rotation(a,m,n);


for(i=0;i<n;i++)

{

for(j=0;j<m;j++)

printf("%d ",a[i][j]);

printf(" ");

}


return 0;

}

⑵ C語言隨機輸入矩陣並逆時針旋轉怎麼做

#include<iostream>
usingnamespacestd;

intmain(){
inti,j,a[4][4];
for(i=0;i<4;i++)
for(j=0;j<4;j++)
cin>>a[i][j];
for(j=3;j>=0;j--)
{
for(i=0;i<4;i++)
{
cout.width(10);
cout<<a[i][j];
}
cout<<endl;
}
return0;
}

⑶ C語言二維數組通過指針旋轉90度

//初始的二維數組:
//1234
//5678
//9101112
//13141516

//順時針轉90度後的二維數組:
//13951
//141062
//151173
//161284

#include<stdio.h>
//#include<stdlib.h>//該頭文件暫時不用
//#include<string.h>//該頭文件暫時不用
#defineN4

//原代碼inta[N][N];//放在這里定義,二維數組a屬於全局變數

//將二維數組通過指針旋轉90度(順時針轉90度)
voidproc(intbuf[N][N],intn)
{
inti,j,t;
int*parr;//指向int類型的指針

parr=&buf[0][0];//將二維數組看成一維數組

for(i=0;i<=n-1;i++)
{
for(j=i;j<n-i-1;j++)
{
t=*(parr+i*n+j);
*(parr+i*n+j)=*(parr+(n-1-j)*n+i);
*(parr+(n-1-j)*n+i)=*(parr+(n-1-i)*n+n-1-j);
*(parr+(n-1-i)*n+n-1-j)=*(parr+j*n+n-1-i);
*(parr+j*n+n-1-i)=t;
}
}
}
voidOutput(inta[N][N])//輸出二維數組
{
inti,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%4d",a[i][j]);
}
printf(" ");
}
}
intmain()//原代碼voidmain()
{
//N的數值不大,二維數組a可放在函數main里定義,作為局部變數
inta[N][N];
inti,j,c=0;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
a[i][j]=++c;
}
}
Output(a);
printf(" ");
//原代碼proc(&a[N][N],N);
proc(a,N);
Output(a);

return0;
}

⑷ 用c語言編程三角形繞一點旋轉九十度怎麼做

A(ax, ay) B(bx, by) C(cx, cy) 移動後A(ax0, ay0)...
1)ax = r*cosα ay = r*sinα
ax0 = r*cos(α+90) ay0=r*sin(α+90) 用三角函數展開就ok了
2)旋轉90度就是坐標點從一個象限旋轉到另一個象限,先判斷正負,再將橫縱坐標交換並根據正負情況乘以-1或者1 這個問題就是高中解析幾何的旋轉問題。或者圖形學里的二維圖形旋轉問題

⑸ C語言如何編寫旋轉矩陣源代碼

這里以順時針旋轉90°為例:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#defineN4
voidmain()
{
inti,j;
inta[N*N],b[N][N];//這里設置旋轉為4*4的矩形,自己在這里改成其它的矩形
int*p=a;//用指針來指向這個一維數組。這樣在旋轉賦值的時候會輕松很多
srand(time(NULL));
for(i=0;i<N*N;i++)
{
a[i]=rand()%100;//隨機生成0~99
printf("%d ",a[i]);
if((i+1)%4==0)
printf(" ");
}

for(i=N-1;i>=0;i--) //旋轉賦值,這里可修改旋轉的方向和角度
for(j=0;j<N;j++,p++)
b[j][i]=*p;

printf("順時針旋轉90度後: ");
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
printf("%d ",b[i][j]);
printf(" ");
}


}

這種旋轉矩形的,個人建議生成一維數組,用指針指向改數組,再用指針來賦值;也可生成二維數組,再定義數組指針來指向,這樣稍麻煩一些些。

⑹ 用c語言實現將bmp圖片(黑白單色)進行任意角度旋轉。求高手給完整代碼。

typedef int (WINAPI ICEPUB_IMGCIRCUMGYRATE)(char *strImgFilename,char *strBmpFilename,int radian);
ICEPUB_IMGCIRCUMGYRATE *icePub_imgCircumgyrate = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
{
icePub_imgCircumgyrate=(ICEPUB_IMGCIRCUMGYRATE *)GetProcAddress(hDLLDrv,"icePub_imgCircumgyrate");
}
if(icePub_imgCircumgyrate)
{
icePub_imgCircumgyrate("a.jpg","a1.bmp",45);
icePub_imgCircumgyrate("d.png", "d1.bmp",120);
}
if(hDLLDrv)
FreeLibrary(hDLLDrv);

⑺ C語言畫圖——關於旋轉圖形和定點陣圖形

你可以這樣做。比如有一個圖形為三角形,在七巧板的中,它可能有8種狀態,然後分別畫出8種狀態的圖形,當你激活它的旋轉程序後,就換一張另一個狀態的圖形。
或者寫一個函數,參數為各個頂點的座標,旋轉的時候通過計算,找到新狀態的各個頂點的座標,這樣也可以。

⑻ C語言中如何將一個正方形矩陣旋轉45度

首先確定繞那一點旋轉,讓後確定各點的坐標,也就是三個點,YC'=-XC*sin(45)

⑼ c語言怎麼旋轉一個矩陣

#include<stdio.h>

int main()

{int i,j,t,n,a[20][20];

scanf("%d",&n);

for(i=0;i<n;i++)

{for(j=0;j<n;j++)

{a[i][j]=i*n+j+1;

printf("%3d",a[i][j]);

}

printf(" ");

}

printf(" ");

for(i=0;i<=n/2;i++)

for(j=i;j<n-i-1;j++)

{t=a[i][j];

a[i][j]=a[j][n-1-i];

a[j][n-1-i]=a[n-1-i][n-1-j];

a[n-1-i][n-1-j]=a[n-1-j][i];

a[n-1-j][i]=t;

}

for(i=0;i<n;i++)

{for(j=0;j<n;j++)

printf("%3d",a[i][j]);

printf(" ");

}

return 0;

}

⑽ 怎樣用C語言實現旋轉

怎樣用C語言實現旋轉
#include <stdio.h>

void main()
{
int M;
int N;
int flag=0;
int num1=0;
int num2=1;
int i=0;
int j=0;
char str='A';
char Array[31][31];
printf("請輸入矩陣的行M和矩陣的列N:");
scanf("%d%d",&M,&N);
Array[0][0]=str;
while(flag < M*N-1)
{
switch(num2%4)
{
case 1:
++j;
if(j == N-num1-1)
{
num2++;
}
break;
case 2:
++i;
if(i == M-num1-1)
{
num2++;
}
break;
case 3:
--j;
if(j == num1)
{
num2++;
}
break;
case 0:
--i;
if(i == num1+1)
{
num2++;
num1++;
}
break;
}

if(++str == 'Z'+1)
str='A';

Array[i][j]=str;
flag++;

}

for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%c ",Array[i][j]);
}
printf("\n");

}

}