基础概念公式推到可参考该专栏下的前几篇博文。
纬山形组织图:
观察可知:纬山形组织图下半部分是右斜组织,上半部分是左斜组织。右斜和左斜按照垂直方向进行排列。
该图是一个2上3下2上1下(从最下面一行从左往右观看)
特点:每一根纬纱上的组织点运动规律保持不变。
飞数分为:经向飞数和纬向飞数
经向飞数:相邻两根经纱对应组织点之间间隔的纬纱根数
纬向飞数:相邻两根纬纱对应组织点之间间隔的经纱根数
对于使用纬纱飞数的组织,应该先填第一根纬纱上(最后一行)的组织点
一、确定经纬纱循环数N2和N1
纬山形斜纹方向在第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
行到第1行
进行赋值,即上半部分的左斜组织,需要改变一下飞数即可
代码如下:
#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-2;//总行数printf("please input f:");scanf("%d",&f);/*
对第1行进行赋值
*/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];}}f=N2-f;//求N1+kw行到第1列,即上半部分的飞数需要将正值转变为负数/*
对N1-kw行到第1行,进行赋值
*/for(i=N1-kw;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;
}
运行效果图如下: