當前位置:首頁 » 編程語言 » C語言三角螺旋

C語言三角螺旋

發布時間: 2023-06-19 09:05:06

『壹』 用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語言螺旋

可以弄一個演示程序


#include<stdio.h>
ints[20][20],N;
voidoutput()
{
inti,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%4d",s[i][j]);
putchar(' ');
}
}
main()
{
inti=0,j=0,k=1,n;
printf("inputanumber:");/*輸入n*n階的n*/
scanf("%d",&N);
for(n=0;n<(N+1)/2;n++)
{
while(j<N-n)//這里是向右
s[i][j++]=k++;
i++;
j--;
while(i<N-n)//這里是向下
s[i++][j]=k++;
i--;
j--;
while(j>=n)//這里是向左
s[i][j--]=k++;
i--;
j++;
while(i>n)//這里是向上
s[i--][j]=k++;
i++;
j++;
printf("n=%d時候 ",n);
output();
}
}



可以看到是依此一層一層填充的。

『叄』 c語言編程實現一個螺旋矩陣,例如輸入 2 4 輸出:1 2 3 4 8 7 6 5

#include<stdio.h>

#define N 20

void matrx1(int a[][N],int m,int n)

{

int d,x=0,y=0;

int right,left,up,down;

for(d=1;d<=m*n;d++)

{

a[x][y]=d;

right=y<n-1&&a[x][y+1]==0;

left=y>0&&a[x][y-1]==0;

down=x<m-1&&a[x+1][y]==0;

up=x>0&&a[x-1][y]==0;

/* if(right||down)

y++;

else

x++;

if(down||left)

x++;

else if(left||up)

y--;

else if(up||right)

x--;*/

if(right)

{

// if(up)

// x--;

// else

y++;

}

else if(left)

{

// if(down)

// x++;

// else

y--;

}

else if(down)

{

// if(right)

// y++;

// else

x++;

}


else if(up)

{

// if(left)

// y--;

// else

x--;

}



}


}

void output(int a[][N],int m, int n)

{

int i,j;

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

{

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

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

printf(" ");

}


}

void main()

{

int a[N][N]={0};

int m,n;

printf("please input num: ");

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

matrx1(a,m,n);

output(a,m,n);

}


這是改好的程序,主要有三個問題

  1. 這個定義應該改成這樣:a[N][N]={0};

  2. right和down的條件忘記減一了;

  3. 每一個if裡面變化應該是固定的,只需變化一個坐標就可以了,因為只能橫豎移動,所以一次只需要變化一個x,或者一個y。


ps.提供另一個思路,直接按行分奇偶情況就可以了,偶數是順序,奇數時倒序

『肆』 螺旋矩陣C語言實現

說一下這個螺旋矩陣的實現方式。
首先,go函數一個遞歸,這你得明白,而遞歸的實現原理類似於棧,也就是先進後出的執行方式。很多人會理解成這樣的執行方式:
ri = 1, rj = 2, gi = 0, gj = 1, start = 2, dir = 0
ri = 2, rj = 2, gi = 1, gj = 3, start = 3, dir = 1
ri = 2, rj = 1, gi = 3, gj = 2, start = 4, dir = 2
ri = 1, rj = 1, gi = 2, gj = 0, start = 5, dir = 3
ri = 1, rj = 0, gi = 2, gj = -1, start = 6, dir = 3
ri = 1, rj = 1, gi = 0, gj = 0, start = 7, dir = 0
ri = 0, rj = 1, gi = -1, gj = 0, start = 8, dir = 0
ri = 1, rj = 1, gi = 0, gj = 2, start = 9, dir = 1
從start = 2開始一直往裡面進,然後算到start = 9?
不,其實並不是這樣,恰恰相反,遞歸會不斷的往裡面進,一直進到最里層,也就是達到條件
if(start>final) return;為止。然後開始出棧,從start = 9開始算,算回到start = 8.。。一直到start = 2結束。
也就是最後的執行順序應該是:
ri = 1, rj = 1, gi = 0, gj = 2, start = 9, dir = 1
ri = 0, rj = 1, gi = -1, gj = 0, start = 8, dir = 0
ri = 1, rj = 1, gi = 0, gj = 0, start = 7, dir = 0
ri = 1, rj = 0, gi = 2, gj = -1, start = 6, dir = 3
ri = 1, rj = 1, gi = 2, gj = 0, start = 5, dir = 3
ri = 2, rj = 1, gi = 3, gj = 2, start = 4, dir = 2
ri = 2, rj = 2, gi = 1, gj = 3, start = 3, dir = 1
ri = 1, rj = 2, gi = 0, gj = 1, start = 2, dir = 0
好了,這就是以上的原理,然後再來看你的gi和gj,處理沖突這一點理解得很對,但是不是說什麼跳到05啥的,處理沖突是這一句:
if(a[ri][rj]==0),首先,ri、rj、gi、gj都是坐標(這兒不懂的追問)看上面的數據,在start 等於9、7、5的時候,ri 、rj的值是一樣的,這也就沖突了,在start等於9的時候 ,
a[ri = 1][rj =1]已經不等於0了,到了if語句肯定不成立了, 自然就走的else,然後用得坐標就變成了gi和gj,也就是start = 7的時候, 位置就是a[gi][gj],實現了解決沖突的效果。
至於gi和gj什麼時候+1什麼時候-1這個,這個需要看一下原作者的思路,通過不同的dir去控制不同的位置,沖突的g坐標將其當做r坐標再去判斷是否該位置上有值,有的話繼續根據dir去尋找,一直到發現該位置是0,然後將其佔有。
不懂的繼續追問

熱點內容
聽ti密碼是多少 發布:2025-02-12 08:22:15 瀏覽:288
淘寶上傳視頻憑證 發布:2025-02-12 08:06:46 瀏覽:878
java畫 發布:2025-02-12 08:01:00 瀏覽:549
光遇安卓官服是在哪裡下載 發布:2025-02-12 07:47:47 瀏覽:648
安卓手機如何關閉程序打開廣告 發布:2025-02-12 07:31:06 瀏覽:469
新版影視大全不能緩存 發布:2025-02-12 07:31:04 瀏覽:976
sql兩個欄位in 發布:2025-02-12 07:29:45 瀏覽:771
漂亮網站源碼 發布:2025-02-12 07:26:40 瀏覽:760
執行腳本前 發布:2025-02-12 07:14:49 瀏覽:472
android天氣預報介面 發布:2025-02-12 07:12:43 瀏覽:703