基础概念公式推到可参考该专栏下的前几篇博文。
纬向破斜组织图:
下半部分(从左往右):,3上2下2上1下,右斜,飞数为+1
上半部分(从下往上):,2上2下1上3下。左斜,飞数为-1
通过分析可得:下半部分即从第N1行到N1-Kw+1行,不管是纬山形组织还是纬向破斜组织都是一样的
不一样的地方在于上半部分:
对于纬山形组织而言,上半部分组织点运动规律不变;
但是对于纬向破斜组织而言,上下部分组织点运动规律不一样。
一、确定经纬纱循环数N2和N1
由于上下两部分是完全反对称关系,故N1= 2 * Kw
二、对矩阵中最下面的一行(N1行)进行赋值
对于一个矩阵而言其大小为N1行N2列,并且组织中的行数是从上而下进行排列,即第一根纬纱对应的就是N1行。
纬山形N1行的求法与经山形的第一列求法一致
,取分子是1,分母为0。
对于N1行的任意一个元素可以标识为a[N1][j],j=1,2,3,…,N2。
,其中j=1,2,3,…,N2
三、根据 N1
行求 N1 - 1
到N1 - Kw + 1
行,即求下半部分的右斜组织
,其中i=N1-1,N1-2,…,N1-kw+1;j=1,2,3,…,N2
四、根据N1 - Kw + 1
行对N1 - Kw
行进行求解,即上半部分左斜组织的最下面一行,不管是经向破斜组织还是纬向破斜组织上下两部分都是反对称关系,根据这个特点可以把N1 - Kw
行元素确定出来
其中j=1,2,3,…,N2
五、根据对N1 - Kw行元素即可对上半部分的组织进行求解,注意飞数需要改变一下即可
其中j=1,2,3,…,N2
代码如下:
#include <iostream>
#include<stdio.h>
using namespace std;int main()
{int i,j,N1,N2,f,m,kw;//kw表示山峰的位置,从而确定出总列数N1int c[10],d[10],a[100][100];printf("please input m:");scanf("%d",&m);for(i=0;i<=m-1;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 kw:");scanf("%d",&kw);//输入山峰位置,从而确定出总行数N2=0;//列数初始化,即经纱循环数初始化,之后需要累加for(i=0;i<=m-1;i++){N2=N2+c[i]+d[i];}N1=2*kw;//总行数printf("please input f:");scanf("%d",&f);/*
对第N1行进行赋值
*/j=1;//先对N1行赋值,从N1行的第1列开始for(i=0;i<=m-1;i++){while(c[i]>0){a[N1][j]=1;//因为是分子,所有值都赋值为1c[i]--;j++;}while(d[i]>0){a[N1][j]=0;//因为是分母,所有值都赋值为0d[i]--;j++;}}/*
对N1-1到N1-kw+1行,进行赋值
*/for(i=N1-1;i>=N1-kw+1;i--){for(j=1;j<=N2;j++){if((j-f)>0) a[i][j] = a[i+1][j-f];else a[i][j]=a[i+1][j-f+N2];}}/*
根据N1-kw+1行 对 N1-kw行进行赋值
*/for(j=1;j<=N2;j++){if(a[N1-kw+1][j]==0)a[N1-kw][j]=1;elsea[N1-kw][j]=0;}f=N2-f;//保证飞数为正数/*
对N1-kw-1行到第1行,进行赋值
*/for(i=N1-kw-1;i>=1;i--){for(j=1;j<=N2;j++){if((j-f)>0) a[i][j] = a[i+1][j-f];else a[i][j]=a[i+1][j-f+N2];}}/*
输出二维数组a[i][j]
*/for(i=1;i<=N1;i++){for(j=1;j<=N2;j++){printf("%5d",a[i][j]);}printf("\n");}getchar();return 0;
}