非規則組織顧名思義,無法通過一個數學模型來描述所有的非規則組織、對于每一個具體的非規則組織而言,其也有一定的規律性可循,即可通過分析每一個具體的非規則組織的組織點運動規律來建立相應的數學模型。
一、平紋變化組織
平紋變化組織即在平紋的基礎上通過延長組織點而得到的組織。
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;
}
運行效果如下: