非规则组织顾名思义,无法通过一个数学模型来描述所有的非规则组织、对于每一个具体的非规则组织而言,其也有一定的规律性可循,即可通过分析每一个具体的非规则组织的组织点运动规律来建立相应的数学模型。
一、平纹变化组织
平纹变化组织即在平纹的基础上通过延长组织点而得到的组织。
1,沿着经纱方向延长组织点即可得到经重平组织
:
2上2下经重平组织;3上3下经重平组织;3上2下变化经重平组织
2,沿着纬纱方向延长组织点即可得到纬重平组织
:
2上2下纬重平组织;
3上3下纬重平组织;
3上2下变化纬重平组织
3,即沿着纬纱方向又沿着经纱方向延长组织点即可得到方平组织
:
2上2下方平组织;
3上3下方平组织;
3上2下变化方平组织
二、表示方式
举个例子:
①
得到表达式之后,可以很容易得出矩阵的大小为8×9,8=3+2+2+1,9=2+2+3+2
②分别对经纬方向上第一列和第一行进行赋值
效果图如下:
之后只需求红框即可:
③对于剩下的区域,没个位置坐标对应的第一列和最后一行
相同为经纱赋值为1黑色,不同为纬纱赋值为0白色
红色线因为两个红点都是白色相同,故为黑色;绿色的线因为两个绿点一个黑一个白不同,故为白色
④序流程图如下:
三、建立数学模型思路
1,变化方平组织的经向基础组织一般形式:
变化方平组织的纬向基础组织一般形式:
2,获取平纹变化组织的经纬纱循环数N1、N2
3,分别对经纬方向上第一列和第一行进行赋值
按经纱基础组织Zj为第一列赋值:,其中i=1,2,…,N1
按纬纱基础组织Zw为最后一行赋值:,其中j=1,2,…N2
核心代码如下:
/*
对第1列进行赋值
*/i=1;//先对第一列赋值,从第一列的第一行开始for(j=0;j<=m-1;j++){while(a[j]>0){x[N1-i+1][1]=1;//因为是分子,所有值都赋值为1a[j]--;i++;}while(b[j]>0){x[N1-i+1][1]=0;//因为是分母,所有值都赋值为0b[j]--;i++;}}/*
对最后一行进行赋值
*/j=1;//先对N1行赋值,从N1行的第1列开始for(i=0;i<=m-1;i++){while(c[i]>0){x[N1][j]=1;//因为是分子,所有值都赋值为1c[i]--;j++;}while(d[i]>0){x[N1][j]=0;//因为是分母,所有值都赋值为0d[i]--;j++;}}
效果图如下:
4,对其余元素赋值:
相关规律如下:,i=1,2,…,N1-1;j=2,3,4…,N2
核心代码如下:
for(i=1;i<=N1-1;i++){for(j=2;j<=N2;j++){if(x[i][1]==x[N1][j]){x[i][j]=1;}else x[i][j]=0;}}
运行效果如下:
四、最终代码优化
代码如下:
#include <iostream>
#include<stdio.h>
using namespace std;int main()
{int i,j,N1,N2,f,m;int a[10],b[10],c[10],d[10],x[100][100]={0};printf("please input m:");scanf("%d",&m);for(i=0;i<=m-1;i++){printf("please input A[%d]:",i+1);scanf("%d",&a[i]);printf("please input B[%d]:",i+1);scanf("%d",&b[i]);}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]);}N1=0;N2=0;for(i=0;i<=m-1;i++){N1=N1+a[i]+b[i];}for(i=0;i<=m-1;i++){N2=N2+c[i]+d[i];}/*
对第1列进行赋值
*/i=1;//先对第一列赋值,从第一列的第一行开始for(j=0;j<=m-1;j++){while(a[j]>0){x[N1-i+1][1]=1;//因为是分子,所有值都赋值为1a[j]--;i++;}while(b[j]>0){x[N1-i+1][1]=0;//因为是分母,所有值都赋值为0b[j]--;i++;}}/*
对最后一行进行赋值
*/j=1;//先对N1行赋值,从N1行的第1列开始for(i=0;i<=m-1;i++){while(c[i]>0){x[N1][j]=1;//因为是分子,所有值都赋值为1c[i]--;j++;}while(d[i]>0){x[N1][j]=0;//因为是分母,所有值都赋值为0d[i]--;j++;}}
/*
对剩余元素进行赋值
*/for(i=1;i<=N1-1;i++){for(j=2;j<=N2;j++){if(x[i][1]==x[N1][j]){x[i][j]=1;}else x[i][j]=0;}}/*
输出二维数组x[i][j]
*/for(i=1;i<=N1;i++){for(j=1;j<=N2;j++){printf("%5d",x[i][j]);}printf("\n");}getchar();return 0;
}
运行效果如下: