鋸齒形斜紋組織圖:
分析:
前半齒長度k,表示山谷到山峰的列數,也就是鋸齒的寬度;
鋸齒飛數s,表示山峰到山峰的行數,也就是鋸齒的高度。
起始點相差4格,也就是第一部分整體向上移動4格即可得到第二部分,同樣道理,第二部分向上移動4格即可得到第三部分
一、求出N1和N2
其中W為以一個完整循環中的鋸齒數;V為一個鋸齒內的經紗根數。
鋸齒形之所以有個上升的趨勢,是因為下降的高度和上升的高度有一個差即S,也就是少下降了S根,故上升的山峰高度差為S。
核心代碼如下:
a=N1;b=s;while(a!=b) //當a==b時結束{if(a>b) //如果a>b,則a=a-b{a=a-b;}else //否則b>a,b=b-a{b=b-a;}}w=N1/a;v=(2*k-2)-s;N2=w*v;printf("w:%d\n",w);printf("v:%d\n",v);printf("N1:%d\n",N1);printf("N2:%d\n",N2);
效果圖如下:
二、求F1第一段鋸齒
可以把整體分為多個部分,每個鋸齒的行為N1,列為V。即每一個鋸齒都為N1×V的子矩陣,最終的組織矩陣就是多個子矩陣并列即可。
為了形成鋸齒,K和S之間必須滿足以下關系:
1,對第1列元素賦值
,其中i=1,2,3…,N1;j=2,3,4…,K
2,對第2到k列進行賦值
,其中i=2,3…,N1;j=2,3,4…,K
3,對第k+1列到V列進行賦值
Ⅰ轉變飛數f,由正轉為負:
Ⅱ之后再進行賦值,i=1,2,3,…,N1;j=K+1,K+2,…,V;
核心代碼如下:
/*
對第1列進行賦值
*/i=1;//先對第一列賦值,從第一列的第一行開始for(j=0;j<=m-1;j++){while(c[j]>0){x[N1-i+1][1]=1;//因為是分子,所有值都賦值為1c[j]--;i++;}while(d[j]>0){x[N1-i+1][1]=0;//因為是分母,所有值都賦值為0d[j]--;i++;}}/*
對第2列到第k列 進行賦值
*/for(j=2;j<=k;j++){for(i=1;i<=N1;i++){if((i+f)>N1) x[i][j] = x[i+f-N1][j-1];else x[i][j]=x[i+f][j-1];}}f=N1-f;//求kj列到N2列右半部分的飛數需要將負值轉變為正數
/*
對第k+1列到V列 進行賦值
*/for(j=k+1;j<=v;j++){for(i=1;i<=N1;i++){if((i+f)>N1) x[i][j] = x[i+f-N1][j-1];else x[i][j]=x[i+f][j-1];}}
效果圖如下:
三、根據F1,求F2第二段鋸齒以及剩余的鋸齒的值
鋸齒飛數s為正向上移動;s為負向下移動
,其中i=1,2,…, N1;j=1,2,…,V
優化公式:
,其中
i=1,2,....,N1;j=1,2,...,v;k=1,2,...,w-1;
程序流程圖如下:
四、最終優化代碼如下:
#include <iostream>
#include<stdio.h>
using namespace std;int main()
{int i,j,N1,N2,m,w,v,k,s,a,b,f;int c[10],d[10],x[100][100]={0};printf("please input m:");scanf("%d",&m);for(i=0;i<m;i++){printf("please input C[%d]:",i+1);scanf("%d",&c[i]);printf("please input D[%d]:",i+1);scanf("%d",&d[i]);}printf("please input K:");scanf("%d",&k);printf("please input S:");scanf("%d",&s);printf("please input f:");scanf("%d",&f);N1=0;for(i=0;i<=m-1;i++){N1=N1+c[i]+d[i];}/*
求N1和s的最大公約數
*/a=N1;b=s;while(a!=b) {if(a>b) {a=a-b;}else {b=b-a;}}w=N1/a;v=(2*k-2)-s;N2=w*v;/*
對第1列進行賦值
*/i=1;//先對第一列賦值,從第一列的第一行開始for(j=0;j<=m-1;j++){while(c[j]>0){x[N1-i+1][1]=1;//因為是分子,所有值都賦值為1c[j]--;i++;}while(d[j]>0){x[N1-i+1][1]=0;//因為是分母,所有值都賦值為0d[j]--;i++;}}/*
對第2列到第k列 進行賦值
*/for(j=2;j<=k;j++){for(i=1;i<=N1;i++){if((i+f)>N1) x[i][j] = x[i+f-N1][j-1];else x[i][j]=x[i+f][j-1];}}f=N1-f;
/*
對第k+1列到V列 進行賦值
*/for(j=k+1;j<=v;j++){for(i=1;i<=N1;i++){if((i+f)>N1) x[i][j] = x[i+f-N1][j-1];else x[i][j]=x[i+f][j-1];}}for(k=1;k<=w-1;k++){for(j=1;j<=v;j++){for(i=1;i<=N1;i++){if(i+s>N1){x[i][k*v+j]=x[i+s-N1][(k-1)*v+j];}else x[i][k*v+j]=x[i+s][(k-1)*v+j];}}}/*
輸出二維數組a[i][j]
*/for(i=1;i<=N1;i++){for(j=1;j<=N2;j++){printf("%5d",x[i][j]);}printf("\n");}getchar();return 0;
}
運行結果如下: