Professional Documents
Culture Documents
题 目:
经编鞋面织物的曲面展开与排版算法研究
答辩委员会主席:
江 南 大 学
地址:无锡市蠡湖大道 1800 号
二○ 年 月
摘要
摘 要
经编提花鞋面具有良好的透气性,被广泛应用于运动鞋的鞋面。经编提花运动鞋
的设计成品在实物化的过程中想要得到完整的用料尺寸、设计鞋面织物花色以及获取
实际生产中合理的排版方案都需要得到三维鞋面的平面展开图。本文研究了一种针对
经编提花鞋面二维展开的算法,并使用展开后的鞋面廓形进行贾卡花型的设计与仿真,
验证了算法的有效性;单只展开的鞋面在完成设计仿真后,对它的设计意匠图进行排
版,得到最终的上机编织图。
将经编提花鞋面三维模型三角网格化并构建了契合展开算法的数据结构。根据鞋
面的几何特征与排版时常用的鞋面形状,基于内外边界的搜索对鞋面进行了切割线的
选取以确保后续算法流程的可行性。接着,因展开需要尽可能减少误差,提出了适用
于三角化网格鞋面中心三角形(即首个展开三角形)的搜索方法。本文给出了一种基
于欧氏距离的单个空间三角形展开的计算方法,列举了单个三角形在展开过程中待求
顶点出现的各种情况,对中心三角形与普通三角形进行区分计算,并给出了待求顶点
二维坐标详细的计算方法;最后,实现了整个鞋面迭代推进的初始展开并得到了相应
的结果。
初始展开的鞋面存在三角化网格分布不均匀等不理想的现象。因此利用质点-弹簧
模型的原理,对初始展开结果进行了优化。通过求取鞋面上各质点的质量、加速度、
速度与位置,建立适用于三角化网格鞋面的质点-弹簧应变能模型。给出了如何根据每
次迭代结果后对单位时间增量值进行合适的调整。最后得到了优化后的展开结果,根
据展开鞋面的廓形进行贾卡提花设计并仿真,并将二维鞋面织物纹理映射至三维鞋面,
查看设计的花型在三维鞋面中的位置正确且形变较小以验证展开算法的有效性。
鞋面作为编织单元直接用于生产,会造成原料的浪费,生产实践中,需将鞋面紧
凑地排列在布面上,以提高生产效率,降低成本。对展开单只经编提花鞋面进行快速
排版方法及鞋材利用率最大化的研究。给出了 3 种常见的经编提花鞋面排版方式,并对
经编提花鞋面材料利用率进行计算。为了排版时鞋面快速合理的放置,提取了鞋面的
区域和边界,得到鞋面排列的具体流程,最终通过边界碰撞检测实现了排版算法。根
据排版算法可并行的特征,使用 CUDA 得到了最终的实现效果,这一算法实现了鞋面
排版的快速化与自动化,同时鞋面位置的合理放置也使织物利用率得到了提升。
关键词:经编鞋面;展开算法;质点-弹簧;排版;并行算法
I
Abstract
Abstract
Warp knitted jacquard uppers are widely used in sports shoes because of their good air
permeability. In the process of materializing the finished product of warp knitted jacquard sports
shoes, it is necessary to get the plane expansion diagram of 3D shoe upper if you want to get
the complete material size, the design of shoe upper fabric color and the reasonable layout
scheme in actual production. In this paper, an algorithm for two-dimensional expansion of warp
knitted jacquard uppers is studied, and the design and simulation of jacquard pattern are carried
out by using the profile of the uppers after expansion, and the effectiveness of the algorithm is
verified. Single unrolled uppers after the completion of the design simulation, the design of the
design of the carpenter diagram typesetting, get the final machine knitting diagram.
The 3D model of warp knitting jacquard vamp is triangulated and the data structure which
fits the unfolding algorithm is constructed. According to the geometric features of the upper
and the shape of the upper commonly used in typesetting, the cutting line of the upper is selected
based on the search of the inner and outer boundary to ensure the feasibility of the subsequent
algorithm process. Then, because of the need to reduce the error as much as possible, a search
method for the center triangle of the shoe upper of the triangulated mesh (i.e. the first unrolled
triangle) is proposed. In this paper, a method for calculating the expansion of a single space
triangle based on Euclidean distance is presented. The various situations of the vertex to be
solved during the expansion of a single triangle are listed. The central triangle is distinguished
from the ordinary triangle, and the detailed calculation method for the two-dimensional
coordinates of the vertex to be solved is given. Finally, the initial unfolding of the whole uppers
is realized and the corresponding results are obtained.
There are some undesirable phenomena such as uneven distribution of triangulated mesh
in the initial unrolled upper. Therefore, the principle of mass - spring model is used to optimize
the initial expansion results. By calculating the mass, acceleration, velocity and position of each
particle on the vamp, a prime-spring strain energy model suitable for triangulating mesh vamp
is established. How to adjust the increment value of unit time according to the result of each
iteration is given. Finally, the optimized unfolding result is obtained. According to the profile
of the unfolding uppers, the jacquard design and simulation are carried out, and the texture of
the two-dimensional uppers fabric is mapped to the three-dimensional uppers, and the position
of the designed pattern in the three-dimensional uppers is correct and the deformation is small
to verify the effectiveness of the unfolding algorithm.
The uppers are directly used in production as knitting units, which will cause waste of raw
materials. In production practice, the uppers need to be compact arranged on the fabric surface
to improve production efficiency and reduce costs. The rapid typesetting method and the
maximization of shoe material utilization were studied in this paper. Three common typesetting
methods of warp knitted jacquard uppers are presented, and the material utilization rate of warp
knitted jacquard uppers is calculated. In order to place the upper quickly and reasonably, the
area and boundary of the upper are extracted, and the specific flow of the arrangement of the
upper is obtained. Finally, the layout algorithm is implemented through boundary collision
II
Abstract
detection. According to the parallel characteristics of the typesetting algorithm, CUDA was
used to achieve the final implementation effect. This algorithm realized the speed and
automation of the upper typesetting, and the reasonable placement of the upper position also
improved the fabric utilization.
Key words: warp knitted upper; expansion algorithm; mass-spring; layout; parallel
algorithm
III
目录
目 录
摘 要 .......................................................................................................................................... I
Abstract ..................................................................................................................................... II
目 录 ........................................................................................................................................ IV
第一章 绪 论 .............................................................................................................................. 1
1.1 课题研究的背景及意义 .............................................................................................. 1
1.2 国内外研究现状 .......................................................................................................... 3
1.2.1 三角化网格曲面切割线搜索策略研究现状 ....................................................... 4
1.2.2 曲面网格初始化展开的中心三角形选择研究现状 ........................................... 5
1.2.3 三角化网格曲面初始化展开研究现状 ............................................................... 5
1.2.4 三角化网格曲面初始化展开结果的优化研究现状 ........................................... 6
1.2.5 鞋面排版相关算法的研究现状 ........................................................................... 7
1.3 课题研究内容与技术路线 .......................................................................................... 8
1.3.1 研究内容 ............................................................................................................... 8
1.3.2 技术路线 ............................................................................................................... 9
第二章 经编鞋面网格化曲面的初始展开算法 ..................................................................... 10
2.1 经编提花鞋面数据结构的建立 ................................................................................ 10
2.1.1 鞋面的数据结构 ................................................................................................. 11
2.1.2 边类的构建 ......................................................................................................... 13
2.2 基于内外边界的三角化网格鞋面切割线的选择 .................................................... 14
2.3 首个展开三角形的选择 ............................................................................................ 16
2.4 基于欧氏距离的初始化展开算法 ............................................................................ 21
2.4.1 单个空间三角形的展开方法 ............................................................................. 22
2.4.2 单个空间三角形的约束展开方法 ..................................................................... 24
2.5 三角化网格的鞋面初始展开流程 ............................................................................ 26
2.6 本章小结 .................................................................................................................... 28
第三章 鞋面初始展开结果的优化与织物设计 ..................................................................... 29
3.1 质点-弹簧模型的建立............................................................................................... 29
3.2 单位时间增量选取的优化 ........................................................................................ 31
3.3 鞋面初始化展开结果的优化步骤与实现效果 ........................................................ 31
3.4 经编提花鞋面织物的设计与仿真 ............................................................................ 35
3.4.1 贾卡意匠图的设计流程 ..................................................................................... 35
3.4.2 鞋面织物的工艺参数 ......................................................................................... 36
3.4.3 鞋面织物的设计与仿真效果展示 ..................................................................... 36
3.5 本章小结 .................................................................................................................... 40
第四章 经编提花鞋面自动排版算法的研究与实现 ............................................................. 41
4.1 经编提花鞋面的排版方式 ........................................................................................ 41
IV
目录
V
第一章 绪 论
第一章 绪 论
1.1 课题研究的背景及意义
经编提花织物是在带有贾卡装置的经编机上编织的一类织物,被广泛应用于运动
鞋的鞋面,经编提花运动鞋设计具有多样性,拥有丰富的花纹效应、良好的吸水透气
性、轻便耐穿以及生产效率高等诸多优良特性使其在众多运动鞋品类中脱颖而出,占
据了较高的市场份额。常见的鞋面设计流程是绘制鞋面的菲林稿,接着进行手工放置,
把多只鞋面在一幅布上进行排版。随着计算机技术和仿真技术在纺织领域的广泛应用,
运动鞋产品的研发产生了新的开发流程,出现了品牌商提供三维鞋面,将鞋面实物化
的过程中为了得到它完整的用料尺寸和方便花色的平面设计以及进行上机排版织造,
需要对运动鞋的鞋面部分进行展开再设计展开鞋面的快速排版方法。工艺人员将设计
好的鞋面上机织造时需对展开的鞋面进行排版,但是由于手工排版效率低下,为了提
高批量生产的效率、提高鞋面产品开发时的面料利用率,鞋面的快速排版和提高面料
的利用率成为了高效率低成本生产的发展趋势,因此在计算机技术的辅助下实现展开
鞋面的自动化排版也成为了生产实践中的需求。
图 1-1 针织运动鞋
Fig.1-1 Knitted athletic shoes
经编鞋面种类丰富,经编贾卡鞋面材料具有少裁剪、一次成形、不易变形、花型
效果丰富等特点,国内外运动品牌开发和生产了大量的经编贾卡鞋面,是目前市场上
较具有竞争优势的一款鞋面材料,在运动鞋领域具有良好的发展前景[1];经编三维结构
的贾卡鞋面材料花型丰富,具有优良的透气、透湿、抗压缩等物理力学性能,且成型
性好,与横编成型鞋材相比,生产效率高,因此经编贾卡三维结构鞋面材料在运动鞋
面市场也具有独特优势[2];经编双针床贾卡提花鞋材因具有立体的结构特征、可成形性、
可提花性以及较高的产能,在鞋材市场占据着重要地位[3] 。
运动鞋上有鞋面、鞋舌、鞋底等,其中鞋舌与鞋面为纺织面料、皮革等,鞋舌结
构简单,易于制作,本文主要对鞋面展开研究。经编提花鞋面在空间中是一种三维的
曲面,在进行排版织造时是一块二维平面织物,面料企业有将运动鞋的三维鞋面模型
展开为二维鞋面图的需求。这一需求就是将已知的三维曲面尽量小变形地展开至二维
平面。曲面的展平技术常用于一些工业制造中,如服装样片、鞋面、船只生产或飞机
1
江南大学硕士学位论文
制造等都需要得到对应产品的平面材料轮廓以方便后续的纹样设计、用料计算、批量
生产等工作 [4]。曲面的类型通常按照易展度进行划分,曲面上所有点的高斯曲率都为
零的曲面就定义为可展曲面,否则就是非可展曲面。是否是可展曲面并不是评判曲面
易展度的高低的唯一标准,但高斯曲率确与曲面的易展度有着极大的关联。高斯曲率
较大的部分展开结果中与空间等比例映射的概率较小,会出现比较大的误差即该处所
在三角形的边长、内角角度、面积至少有一个因素与原三角形存在较大的差距。而判
定曲面易展度的另一标准就是所求点的高斯曲率也由其所在的所有三角形的内角和与
这些三角形的面积之和决定[5,6]。一般情况下,鞋面抽象化成的曲面上的曲率分布不均,
有的部分高斯曲率接近于 0,这部分的易展度较高(如图 1-2(a)),有的部分高斯曲率值
较大,易展度相对来说较低展开难度较大(如图 1-2(b))[7]。
2
第一章 绪 论
1.2 国内外研究现状
曲面展开技术多应用于产品设计领域,由于众多产品实物结构复杂直接展开的可
操作性较低,通常是数学理论上的不可展曲面,这类曲面展开成果通常难以得到理想
的结果。在计算机技术没有广泛应用的时代,不可展曲面的展开受到技术的限制难以
通过人工计算得到展开的二维平面,关于不可展曲面的展开技术的相关研究起源于上
世纪的 80 年代,国外由 Manning 首先提出了一种基于等距树算法的曲面展开的方法并
通过计算机将其应用于制鞋工业中[11]。随着相关展开需求的增加与计算机技术的普及,
随后,Wang[12]、Li[13]等众多领域的学者都对不可展曲面的展开技术进行了深入的研究。
复杂曲面的展开在多个领域都有实际的应用场景,经过多个领域研究人员的共同努力,
该方向得到了重大的突破。该研究方向对于各领域都有较高的实用性与可操作性,因
此复杂曲面的展开研究受到了多个领域的研究者的青睐,并陆续研究出了针对不同领
域产品的展开算法以及通用算法的策略。
3
江南大学硕士学位论文
1.2.1 三角化网格曲面切割线搜索策略研究现状
曲面切割对于初始化的展开具有重要意义,将会影响曲面初始化展开的精度。好
的分割线可以有效降低曲面在未优化时的误差、减少展开结果的形变程度。展开对象
由于材质的力学性能以及制造工艺,通常会将其拆分成若干部分[14]。如服装样片或鞋
面,在经过一定的剪裁后展平后再缝制而成会达到不错的三维-二维的拟合效果。关于
曲面切割大致分为两种类型:
(1)类型 1:曲面块分割法
该方法适用的曲面特征是明显可以观察出由几块相对易展度较高的多个曲面拼接
而成的异形曲面,那么可以沿多个曲面相交线进行切割,将其分解成多个易展度较高
的曲面(如图 1-4(a))。
Lo 提出了一种比较容易理解的算法用于求取三角化网格曲面的相交线集,目的是
将多个被切割的曲面相交线可以自动接合。但该算法的局限性体现在,如果相交线位
于曲率较高的部位,那么在接合工作中难以将其与原来的相交线完美拟合,存在较大
的误差,不适用于一些表面结构复杂的三维物体[15]。Coelho 在 Lo 给出的算法基础上,
在参数曲面上定义有限元网格,然后对其交集进行计算 [16]。
(2)类型 2:添加边界分割法
该方法适用的曲面特征是无法通过切割的分解方式将其分解成可展度较高的曲面,
在保证曲面完整性的同时,通过在曲面上搜索合适的切割线,通过增加曲面边界的方
式提高曲面整体的易展度(如图 1-4(b))。
适用于本类型切割方法的曲面大多为服装、鞋面、布偶玩具等产品。Bruyns[17]、
Bielser[18]、Nienhuys[19]等人相继提出了这类曲面的切割策略,经整理汇总,他们的核
心思想可以概括为:第一步,获取既定切割线与三角化网格曲面的交点;第二步,将
切割线融入三角化网格曲面,形成曲面的一部分;第三步,由于新加入的边打乱了原
有的三角化网格结构,需要重构三角化网格的拓扑结构,并将切割线视为两条整体的
网格边,分离这两条网格边,形成新的三角化网格曲面的边界。另外,该类算法中得
到的切割线也可以是适用于单连通区域的闭曲线。
Sheffer[20]等人研究了曲面的自动化切割算法,同样将其应用于多种类型的曲面中,
相比于不进行切割或是随意选择的切割线来讲,结果证明该方法确实有效降低了曲面
展开结果种的变形;Munkers[21]等人则认为对曲面进行切割将改变曲面的边界,切割线
将连续的曲面断开,因此在达到降低曲面展开结果的变形程度的前提下,选取尽可能
小的切割线是搜索曲面切割线算法优化的方向;接着 Wang[22]等人从优化切割线长度的
角度出发,提出了一种缩短切割线的算法:首先降低高斯曲率,接着选取曲面内高斯
曲率较高的点作为目标切割线的起点 ,选取沿测地线到达曲面边界的最小距离作为该
曲面的目标切割线,这样可以有效的减少切割线的长度。
4
第一章 绪 论
(a) 类型 1 (b) 类型 2
图 1-5 两种分割方法的曲面对比[22]
Fig.1-5 Surface comparison of two segmentation methods [22]
经过分析三角化网格鞋面的特征,认为第二种类型的切割方式是鞋面在进行初始
化展开前的最佳展开方式。
1.2.2 曲面网格初始化展开的中心三角形选择研究现状
中心三角形就是整个曲面展开过程中的第一个需要被展开的三角形,曲面的初始
化展开结果的好坏受中心三角形的位置影响。Hinds[23]等人讨论了复杂曲面采用分治思
想展开时,初始展开三角形的选择影响着曲面的展开结果;马明旭等人对无法切割必
须整体展开的三角化网格曲面进行研究后得出结论,这类曲面受中心三角形位置的影
响更为深远[24]。同时基于规则曲面,对曲面的易展度做出尝试选取复杂规则曲面的最
佳初始展开点所在的三角形[25];毛昕等人基于上述研究,通过分析曲面的常用展开方
法,给出了一种近似展开样板误差的测评方法,证明了中心三角形的选择对于整个曲
面初始化展开流程的重要性,且它所在的位置具有一定的客观性并给出了相应的搜索
中心三角形的方法[26]。
王红艳提出了中心三角形选取的原则:如果是中心对称的三角化网格曲面,选取
的中心三角形的三点中应包含曲面的对称中心;如果是对称的三角化网格化曲面,选
取的中心三角形的三点中应有一点在曲面的对称轴上;如果三角化网格曲面的曲率分
布不均,选取的中心三角形应该位于曲率较大的部位;若曲面并无以上三种特征,则
选取曲面中心点所在的三角形作为中心三角形[27]。陈功则具体了给出了一种中心三角
形的搜索方法,他认为对于相同的曲面来说,中心三角形的选择应该能使展开过程中
历经的圈数尽可能地少,从边界处发,每遍历一圈三角形就叠加它们的层次权值,直
到找到曲面层次权值最高的三角形,就是该算法搜索出的中心三角形[28]。
1.2.3 三角化网格曲面初始化展开研究现状
研究三角化网格曲面展开算法的目的是,将不易展开的复杂曲面尽可能小变形或
不变形的展示在二维平面上。曲面展开结果的变形程度衡量主要从宏观与微观两种角
度进行衡量。宏观上,可以大体观察展开结果是否与三维模型一致,接着通过计算判
断展开结果总面积与三维模型的面积差值、边长差值,从而确定展开结果的误差大小;
微观上,可以对比三角形的内角大小、三角形面积、三角形边长、三角形之间的相对
位置是否与曲面相符。曲面的这些几何属性保持不变,或产生较小的改变就可以视为
5
江南大学硕士学位论文
理想的展开结果[29]。
三角化网格曲面展开算法是建立待展曲面的数据结构,实现曲面的空间形态与平
面展开结果形成一一映射的关系即 f(M(V,E,T)) = M′(V,E,T),f(x)为空间到平面的映射函
数,这一映射关系的实现,可以体现曲面分别在空间与平面的状态即拓扑同胚[30]。
图 1-6 三维-二维曲面拓扑同胚[30]
Fig.1-6 Three - two - dimensional surface topological homeomorphism[30]
曲面展开技术的研究最早可以追溯到 1980 年,对于曲面展来技术适用范围的研究
是该领域最热的研究方向之一。陈动人等人首先给出了将待展曲面抽象成三角化的网
格曲面,接着基于伪直母线将复杂的三角化网格曲面进行分割,接着采用分块的方法
将切割的曲面依次展开,最终得到了相应的展开结果[31]。Sheffer 提出了一种曲面参数
化展开算法,他认为展开角度不变可以大大提高曲面的展开质量,结果证明,该方法
可以有效减少展开结果中三角形的折叠或翻转现象,但该算法易积攒较大的误差且时
间复杂度较高[32]。Hormann 等人提出了一种分片展开的方法,但这种方法的使用有一
定的局限性,并不适用于无法进行切割的复杂曲面[33]。 Olga 等人则提出了搜索中心三
角形,随后迭代地展开邻域三角形,并蔓延式地将曲面完全展开,这种方法对于曲率
较大的部位展开结果会存在断裂或折叠的现象,可以通过约束展开,约束展开优化等
方式对结果进行调整,以达到预期的展开结果[34,35]。Woonjoon Cho 等提出了一种建立
曲面三维-二维的映射函数,并将映射函数的误差最小化的算法,来得到理想的曲面展
开结果。值得一提的是,该算法实现后自动删除展开结果中三角化网格的子相交线以
确保三维-二维曲面之间的拓扑同胚,保证曲面从整体到局部的一一对应 [36]。李基拓则
将曲面划分为若干条三角带,提出了一种以曲面对称轴所在的三角带视为中心三角带,
沿中心向边界的方向依次展开每一条三角带直到展开所有的三角带[37]。
6
第一章 绪 论
过选择首个三角形来降低整个曲面的展开误差,但是针对特别复杂的曲面也会出现折
叠和断裂等不够理想的展开效果;Woonjoon Cho 等人则通过建立映射函数得到曲面展
开结果;李基拓则是以三角带为单位依次展开整个曲面。
1.2.4 三角化网格曲面初始化展开结果的优化研究现状
相对较复杂的不可展曲面或是难以进行分割必须进行整体展开的曲面在进行初始
化展开后,很难得到质量较高的展开结果,这些二维平面待优化的空间较大,可以采
取一些优化手段得到理想展开结果。
McCartney 等人用三角化网格曲面中,分析各三角形长度与三维曲面对比的变化程
度,在曲面上选取一点,选取变形能释放最快的一个正交方向,将选中的点按这个方
向进行位移,或插入省道和三角形插布来改善曲面的初始条件达到减少误差的目的[38];
Wang 等人通过建立质点-弹簧模型,优化初始化展开结果时,按照顶点受力最大的方向
进行位移,通过不断的位移顶点的方式,迭代地减少展开结果中的变形[39]。Azariadis
等人将曲面展开技术应用于制鞋中,他们将曲面首先进行整体性的约束优化并保持测
地曲率,通过三角化网格各边的长度、各三角形的面积变化以及测地曲率来构建曲面
展开的相关函数。接着,引入误差函数来评判曲面展开结果的质量[40]。Zhang 等人提出
的一种算法专门针对本身具有一定弹性的曲面,这样的曲面展开后的结果允许存在一
定的误差变形,并采用暴力递归的手段推出动态转移方程实现动态规划的曲面展开算
法[41]。
胡津铭等人认为质量较高的曲面展开结果中曲面上的变形能应尽可能的小,提出
了一种专门针对复杂曲面释放变形能的优化算法,该算法从两个方向进行优化。横向
上面向展开过程,关注三角带的展开顺序、采用的展开方法、变形能如何释放的问题、
以及出现翻折反转的三角带如何处理和校正;纵向上则从宏观上建立适合曲面的三角
化的层次网格, 较好的层次网格可以展开复杂度较高的曲面,并在一定程度上降低展
开结果的变形程度[42]。梁堰波等人则先在三角化网格曲面上建立对应的纹理坐标,直
接利用力学的方式来把控曲面的展开结果,保证曲面展开后形状,边长,各三角形的
内角形变的最小化,该算法通常情况下可以得到完美的展开结果,产生的误差很少,
但为了保证运行过程中的稳定性,展开的时间复杂度较高[43]。韩林等则基于该模型根
据待优化区域中质点当前的受力情况、所在位置以及当前的速度等信息对下一个点的
这些信息进行迭代,最终完成能量的释放,但该算法迭代次数较大时间复杂度较高,
整个过程耗费的时间较长[44]。王俊彪等人提出了一种单位三角形等变形的算法,将三
角化的网格曲面进行初始化展开后查看结果,然后最小化展开结果中的变形能来调整
曲面展开的形状以、各点的位置、各边的边长,最终实现二维图形与曲面达到最高的
契合[45]。
1.2.5 鞋面排版相关算法的研究现状
产品设计的商业化,都要面临对相关产品大批量生产的问题。在服装、制鞋、玩
具等领域,需要批量生产这些产品的平面样布,因此如何排版更加节省原料,如何提
7
江南大学硕士学位论文
高排版效率也成为了生产过程中必须考虑的问题。
目前关于服装面料的剪裁、板材加工等领域已经有较多的排版算法研究。梁建军
等人在关于服装 CAD 软件技术研究现状方面阐述了计算机辅助服装排料的三种方法,
目前实用排料系统均采用自动排料与交互式排料相结合的方法[46];卓开霞等人基于皮
革服装 CAD 技术,采用 QPSO 算法模型,来对服装矩形样板的优化排样进行比较分析
研究,该算法性能稳定,计算量较小,对不同灰度级范围的皮革面料图像处理非常合
适,但是存在材料利用率低的缺陷[47];汪朋朋等人给出了一种基于最小重力势能原理
与遗传算法的服装排料算法,利用遗传算法求解不同顺序下的排料结果,通过全局优
化概率搜索来产生最佳排料顺序[48];肖友清等则基于服装 CAD 的排版系统实现了碰撞
检测,利用 CRgn 类中的函数来判断两个多边形即平面衣片是否相交,实现了使衣片排
列的紧密又不重合[49]。
通过分析国内外的研究现状可以发现,三角化曲面展开技术发展较为成熟,但是
经编鞋面织物几何特性复杂,缺少针对该种类曲面的特定展开算法,应用已有的展开
算法难以得到理想的展开效果,需要对研究专门针对经编鞋面织物的展开算法;根据
经编织物的特性可知,经编织物如果在编织时对设计好的图案随意翻转,会改变织物
的外观与尺寸,这一特性影响了经编鞋面织物在布幅中的排列方式,因此基于二维鞋
面的几何特征与经编织物不具备各向同性的特征,需要研究展开后的经编鞋面快速排
版方法。
1.3 课题研究内容与技术路线
1.3.1 研究内容
本文建立了一种针对经编提花鞋面复杂曲面的展开算法,为了将展开的经编提花
鞋面投入批量生产,研究了专门针对经编提花鞋面的自动排版算法,最终给出了三种
排版方式并基于统一计算设备构架来实现排版算法。首先获得经编提花鞋面 3D 模型三
角化网格的相关信息,构建整个鞋面的数据结构,接着对三角化网格鞋面进行初始展
开,并基于质点-弹簧的能量模型对初始展开结果进行优化进而得到理想的二维鞋面样
片。最后对设计好的单只鞋面进行排版的研究,用于上机编织。
(1)研究经编提花鞋面的初始展开算法。建立完整的待展鞋面数据结构,由于
obj 文件中缺少三角网格鞋面的边信息,研究如何根据提供的点与三角形信息建立待展
鞋面的边信息;为了确保得到符合生产中鞋面排版形态的二维展开结果,给出了鞋面
在初始展开前切割线的搜索方法。研究中心三角形(首个展开三角形)位置的选择,
对单个三角形展开的不同情况,待求点的取舍等做了详细的研究,并给出整个鞋面完
整的初始展开流程。
(2)研究如何对初始展开结果进行优化。建立质点-弹簧的能量模型,对初始展
开结果进行分析并优化,给出了每一次迭代优化中单位时间增量的数值求取方法并给
出初始展开结果中过剩变形能的释放方法,并使用优化后的展开鞋面廓形进行织物组
织的设计与仿真,并将仿真的鞋面纹理映射至三维鞋面。
8
第一章 绪 论
(3)基于经编织物不能随意翻转的特殊性,研究 3 种适用于经编提花鞋面的排版
方法与面料利用率的计算方法。为了排版时鞋面可以快速合理放置,研究鞋面排列的
具体流程。根据鞋面排版可并行化的特征,基于边界提取与碰撞检测,使用 CUDA,
研究鞋面自动化的快速排版算法。
1.3.2 技术路线
图 1-8 课题研究的技术路线图
Fig.1-8 Technology route of the research
9
江南大学硕士学位论文
第二章 经编鞋面网格化曲面的初始展开算法
鞋面三维模型是一个非连续多边界的复杂曲面,选择三维鞋面初始展开前的切割
线进行分离形成新的边界点与边界边;选取中心三角形(首个展开三角形)的搜索范
围,对适用于三角化网格鞋面的中心三角形搜索方法与鞋面上单个空间三角形展开的
具体方法以及整个鞋面初始展开的详细流程进行研究。
2.1 经编提花鞋面数据结构的建立
为了便于后文中的算法顺利进行,将省去待展经编提花鞋面的颜色、布料纹理、
组织结构,内部形态等细节,采用曲面展开技术中对待展对象主流的表示方法:用三
角形的网格来模拟鞋面的表面形态即将其抽象为一个由若干个三角形组成的三角化网
格鞋面。
基于初始展开算法的研究需求,建立三角化网格鞋面的数据结构,它的框架由四
个类组成:鞋面(Upper)类、三角形(Triangle)类、边(Edge)类、点(Vertex)类。
面料生产企业拿到的三维模型通常为 obj、stl 等常用的 3D 格式文件。本文采用 obj 格
式的 3D 模型文件进行展开算法的研究。obj 文件中主要包含了 3D 模型的顶点三维坐标
信息 v、顶点的贴图坐标 vt、顶点的法线 vn、构成 3D 模型的面信息 f 等,鞋面的展开
算法主要使用顶点的三维坐标信息 v 以及面信息 f,通过这两类信息,可以构建鞋面的
边信息。obj 文件的顶点 v 与面 f 的使用如下:
(1)按照一定的顺序提供了鞋面上所有顶点的三维坐标信息,每个顶点的排列次
序为每个顶点索引次序。如图 2-1,obj 文件顶点索引次序是从 1 开始,计算机程序中用
次序 0 来表示所有集合的第 1 个元素,因此导入后需要对所有顶点索引次序做减 1 的处
理。
10
第二章 经编鞋面网格化曲面的初始展开算法
2.1.1 鞋面的数据结构
(1)点(Vertex 类)
class CVertex
{
public:
CVertex(void);
~ CVertex(void);
CVertex(double x,double y,double z);
CVertex(double x1,double y1,double z1,double x2,double y2,double z2);
int v;
GLfloat Vbefore[3];
GLfloat Vafter[3];
}
一个点包含的信息有该点的索引 v,该点展开前的三维坐标信息,展开后的二维坐
标信息。在 obj 文件导入时,就获取鞋面上所有点的三维坐标信息。将三维坐标信息存
入 Vbefore,求解后二维坐标信息则存入 Vafter 中。
(2)边(Edge 类)
class CEdge
{
public:
CEdge(void);
11
江南大学硕士学位论文
~CEdge(void);
CEdge(int a,int b);
int Vedge[2];
}
一条边包含的信息有构成这条边的两个顶点 v1、v2,Vedge 用来存储构成边的 v1、
v2。在完成边信息的构建以后,可以通过点的索引来找到该点所关联的所有的边。
(3)三角形(Triangle 类)
class CTriangle
{
public:
CTriangle(void);
~CTriangle(void);
CTriangle(int v1,int v2,int v3);
CTriangle(int v1,int v2,int v3,int e1,int e2,int e3);
int vertexID[3];
int edgeID[3];
}
一个三角形的信息包含三角形的三个顶点信息与三条边的信息,分别存入 vertexID
与 edgeID 中,在 obj 文件导入时就得到三角形三个顶点的信息,当边信息构建完成时,
每个三角形加入对应的三条边的信息。
(4)鞋面(Upper 类)
待展三角化网格鞋面可以看作一个由若干三角形集、边集与点集构成的整体。各
类之间的耦合关系如图 2-3 中,箭头被指向的类包含于箭头指向的类。
图 2-3 鞋面数据结构各类之间耦合关系示意
Fig.2-3 The coupling relationship between various types of upper data structure
class CUpper
{
public:
CUpper (void);
~CUpper (void);
vector<CVertex> u_vertices;
vector<CEdge> u_edges;
vector<CTriangle> u_triangles;
12
第二章 经编鞋面网格化曲面的初始展开算法
}
一个鞋面整体上的信息有:一个点集 u_vertices 用于鞋面上所有的顶点;一个边集
u_edges 用于鞋面上所有的边;一个三角形集 u_triangles 用于鞋面上所有的三角形。
2.1.2 边类的构建
构建边类以联结点与三角形流程图如下:
第一步,导入鞋面 3D 模型的 obj 文件,获得所有三角形的信息与所有顶点的三维
坐标信息。每个点设置标记 e 用来判断该点是否已经被创建的边使用。如果两个点的 e
都被标记为 true,说明这条边已经创建不再重复创建;否则,就可以创建一条新的边存
入边集的对应集合。
第二步, 遍历集合 u_triangles,每次获取一个三角形 T。
第三步, 如果遍历的是第一个三角形,则只需将 T 的三个顶点两两匹配创建三
条边,并将三条边加入边集 u_edges,接着,将 T 的三个顶点的 e 标记为 true,并跳转
至第五步。
第四步, 如果 T 不是获取的第一个三角形,则需要考虑该三角形的点构成的三
条边是否已经存入 u_edges。如果构成新的边的两个顶点 e 没有全部标记为 true,就可
以创建一条新的边。
第五步,根据 u_edges 的信息,更新构成 T 的三条边的索引信息。
第六步,查看 u_triangles 的遍历是否结束。如果结束,边的构建流程结束;否则跳
转回第二步。
边信息构建完成后,可以查看 u_edges 中构成每条边的两顶点信息(如图 2-4),
u_triangles 中的每一个三角形都被记录了构成它们的三条边的信息(如图 2-5)。
13
江南大学硕士学位论文
图 2-5 每个三角形三条边索引示意
Fig.2-5 Three sides of each triangle are indexed
2.2 基于内外边界的三角化网格鞋面切割线的选择
本文采用如图 2-6 的三角化网格鞋面进行展开算法的研究。
图 2-6 待展鞋面模型
Fig.2-6 The upper model to be developed
对于鞋面的切割遵守两个原则:
(1)选取需要保证鞋面展开变形的最小化,切割线将鞋面分开后不能改变鞋面的
基本形状。
(2)满足制鞋工艺的需求适用于鞋面在进行排版时的鞋面形状,鞋面在排版时通
常近似于对称,这样做可以保证在整幅布料中对单个鞋面排版放置时没有明显的突出
或凹陷区域,从而使布料的利用率最大化。
三角化网格鞋面不是一个连续的曲面模型,它拥有两条闭合的连续边界,较长的
连续边界称为外边界,较短的连续边界称为内边界(如图 2-7)。在进行初始化展开之
前通过连接合适的内外边界点得到一条分割路径并形成新的边界点与边界边。由于切
割线的划分会改变鞋面的结构,为了得到排版时需要的鞋面形状,在确定划分区域后
尽量连接能够得到对称结果的内外边界点。通过分割线增加鞋面边界点与边界边的数
量,使得三角化网格鞋面在得到尽可能贴合三维曲面原型展开结果的同时,从最小程
度上改变鞋面的结构。
14
第二章 经编鞋面网格化曲面的初始展开算法
图 2-7 鞋面内外边界示意图
Fig.2-7 Schematic drawing of upper inner and outer boundary
连续单边界曲面的边界搜索方法,只需要遍历边集,如果一条边仅属于一个三角
形,那么就可以容易的判断出该边为曲面的边界边,组成这条边的两个点为边界点。
但是三角化网格鞋面是一种多边界非连续曲面,使用常规的边界搜索算法并不能区分
它的内外边界,本文给出了一种专门针对三角化网格鞋面区分存储内外边界的算法,
具体步骤如下:
第一步,三角化网格鞋面看成一个连续单边界曲面,将搜索到的边界点与边界边
不区分内外边界分别存入 boundPoint 与 boundEdge 两个容器中。
第二步, 遍历 boundPoint 获取顶点 P,获取该顶点的 y 轴坐标记为 yb,并得到直
线 y = yb。
第三步,每得到一个 yb 就遍历 boundEdge,获取一条边 e,得到构成边 e 的两个顶
点的 y 轴坐标 y1 与 y2,判断 yb∈[y1,y2]或 yb∈[y2,y1]是否成立。如果成立跳转至第四
步,否则跳转至第五步。
第四步,求出如图 2-8 中 yb 所在的直线与 e(图中以线段 AB 示意)的交点 c 的 x
轴坐标,将它的 x 轴坐标与这条边存入一个键值对型(key-value)的临时容器,一一对
应。
图 2-8 直线 yb 与曲面某边相交示意图
Fig.2-8 Schematic diagram of line y = yb intersecting an edge of the surface
15
江南大学硕士学位论文
2.3 首个展开三角形的选择
采用基于欧氏距离原理的展开算法,选取首个展开三角形(后文将此三角形作为
整个鞋面的中心三角形,简称中心三角形)进行展开,随后,沿着这个初始三角形一
轮一轮迭代地向外推进展开直到边界,至此鞋面上所有三角形在理论上全部展开。
中心三角形的选择对鞋面展开结果存在着较大的影响,毛昕[23]等人认为所有曲面
都存在最优起始展开的中心三角形,他通过选择的不同的中心三角形对同一曲面进行
16
第二章 经编鞋面网格化曲面的初始展开算法
展开,证明了中心三角形对展开结果的重要影响。本文结合王红艳[27]等人提出的中心
三角形选取原则,认为计算每一轮三角形的展开都会存在一定的误差,展开轮数的数
量影响着鞋面初始展开的误差迭代次数,最终直接关系着初始展开结果的形变程度。
选择的中心三角形应具备尽可能使展开轮数最少的特点,基于三角化网格鞋面的几何
特征对中心三角形的选择做了两方面的考虑:
一方面,中心三角形的选择可以分为在边界上与在内部两种情况:如果将它选定
在外边界边上,那么展开最终到达内边界的迭代误差较大,导致内边界的形变程度较
大;同理,如果选择内边界边上的三角形,那么外边界边最终可能发生较大的形变,
应该将减少展开三角形到达边界的计算轮数。除此之外,中心三角形的选择应该尽量
靠近待展曲面的对称中心,如果没有对称中心应该尽量选择曲面对称轴上的点所在的
三角形作为整个曲面的中心三角形。鞋面是一个近似对称的曲面,因此用一条近似的
对称轴(如图 2-11)来将待展鞋面看作是一种近似对称的曲面,提出适用于鞋面的中
心三角形搜索方法。
图 2-11 鞋面的近似对称轴
Fig.2-11 Approximate axis of symmetry of the upper
另一方面,中心三角形的展开误差决定了鞋面初始展开的起始误差,也影响了最
终的迭代误差。对于复杂度较低且规则的曲面来说,中心三角形靠近它的对称中心或
是靠近对称轴的中心位置即可。鞋面是非连续、多边界的复杂曲面,靠近近似对称轴
中点位置的部位是鞋面的非连续部分,没有三角形对该部位进行填充,应该选择连续
且平缓的区域作为中心三角形的搜索区域。基于三角化网格鞋面的几何特性,本文选
取图 2-12 中选取的区域作为中心三角形的搜索区域,主要基于以下两点原因:
17
江南大学硕士学位论文
图 2-12 中心三角形目标搜索区域
Fig.2-12 Center triangle target search area
(1)该区域变化起伏平缓、相对规则且包含了鞋面的近似对称轴,符合前文的选取原
则。
(2)图中所示的区域是一个连续的曲面,无内边界,容易搜索出该区域靠近中心位置
的三角形,操作性较高。
三维鞋面模型的坐标体系如图 2-13,如下给出了关于鞋面中心三角形搜索方法的
详细步骤:
图 2-13 三维鞋面坐标轴示意(x、y、z 轴)
Fig.2-13 Three-dimensional upper coordinate axis (x, y, z axis)
第一步,将整个鞋面垂直映射到二维平面如图 2-14(a),搜索鞋面上所有点中 x 坐
标的最小值 xmin 所在点 PA 与最大值 xmax 所在的点 PB,计算出它们的平均值得到直线
x=xmid(如图 2-14(b))。
第二步,根据鞋面的几何特征,获取穿越直线 x = xmid 的 2 条外边界边与 2 条内边
界边,接着分别求取直线 x = xmid 与这些边的交点坐标(如图 2-15(a)),会得到图 2-15(b)
中的四个交点。
根据三角化网格鞋面模型使用的坐标轴,将 4 个交点的 y 轴坐标从大到小进行排
序,取排序结果中的前两个值所属的交点即为图 2-15(b)中所标注的点 PC 与 PD 的 y 轴坐
标即为 ymax 与 ymin 的值,求这两个坐标的平均值得到直线 y = ymid,那么鞋面上坐标
(xmid,ymid)就定为整个鞋面的中心点 P(如图 2-16),接下来根据中心点 P 确定中心三角形。
18
第二章 经编鞋面网格化曲面的初始展开算法
19
江南大学硕士学位论文
(a)中心点到各边的距离 (b)点到边的距离
图 2-17 三角形的内部点 P
Fig.2-17 The interior point of the triangle is P
表 2-1 中心三角形不同位置展开结果示意
Tab.2-1 The center triangle at different positions is expanded
首个展开三角形 在模型中位置示意 展开结果
20
第二章 经编鞋面网格化曲面的初始展开算法
如表 2-1 所示,首个展开三角形Ⅰ是被随机选择作为中心三角形,首个展开三角形
Ⅱ则是采用前文中所说的计算方法搜索的三角形作为中心三角形,可以说明,中心三
角形起始位置的不同会对鞋面的展开结果会产生较大的影响。
2.4 基于欧氏距离的初始化展开算法
欧氏距离又称为欧几里得距离,它是最常见的距离度量标准之一,表示 n 维空间中
任意两点间的真实距离。鞋面初始展开算法的研究是基于欧氏距离来实现的,求出三
维空间的同一三角形中两点之间的实际距离,作为求取这两点从三维曲面展开到二维
平面的已知条件。
三角网格鞋面初始化展开是由若干的展开轮数依次迭代完成。第一轮是将中心三
角形展开(如图 2-18(a))、第二轮是将与中心三角形共边的三角形展开(如图 2-18(b))、
第三轮是将与第二轮新展开的三角形共边且未展开过的三角形展开(如图 2-18(c)),图
中颜色相同的三角形表示为同一轮需要展开的三角形,不同颜色则表示不同的展开轮
数…以此类推,向边界一轮一轮波浪式地迭代推进。
21
江南大学硕士学位论文
图 2-19 基三角形的定义
Fig.2-19 Definition of a basis triangle
单个三角形的展开工作分为两种情况即中心三角形的展开与其他三角形的展开,
中心三角形的展开较为简单,只需获取它的三个顶点的三维坐标,以及其中两个点二
维坐标就可以将它展开;其他的三角形由于展开过程中误差的不断积累,或是某三角形
在鞋面上的几何特性比较特殊,因此就需要考虑与它的共边三角形的位置关系、求出
多个点的取舍方法以及需要被约束的次数等因素。
2.4.1 单个空间三角形的展开方法
单个空间三角形的展开方式是基于欧氏距离的原理来实现的,可以转化为一个简
单的平面几何问题,即已知三角形三边长度和其中两点的坐标信息,求出第三个点的
坐标信息。这一问题通常会有两个结果,从代数理论上讲两个结果均正确,但是在曲
面展开的过程中,需要实际考虑第三点与其他两点的位置关系。单个三角形的展开流
程如下:
第一步, 获取待展三角形 curTriangle 与它的基三角形 baseTriangle, curTriangle 的
三个顶点 v1、v2、v3,其中 v3 是待求点,v1、v2 是已知二维坐标信息的点。curTriangle
的 v1、v2、v3 三点的三维坐标分别记为(x1,y1,z1)、(x2,y2,z2)、(x3,y3,z3),二维坐标分别记
为(x12,y12)、(x22,y22)、(x32,y32)。将在 baseTriangle 上但不在 curTriangle 的顶点记为 vBase
并获取该点的二维坐标(xbase,ybase)。
第二步,分别计算 v3 到 v1 和 v3 到 v2 的欧氏距离 d1 与 d2。
d1 = √(x1 − x3 )2 + (y1 − y3 )2 + (z1 − z3 )2 (2-2)
d2 = √(x2 − x3 )2 + (y2 − y3 )2 + (z2 − z3 )2 (2-3)
第三步,如果 curTriangle 不为中心三角形,那么该三角形通常与它的基三角形呈
现出以下三种位置关系(如图 2-20):
22
第二章 经编鞋面网格化曲面的初始展开算法
Fig.2-20 Schematic diagram of different cases of undeveloped triangle and base triangle
情况 1:当 x12≠x22 且 y12≠y22 时,根据 d1,d2 列出求解方程组
(𝑥 − 𝑥32 )2 + (𝑦12 − 𝑦32 )2 = 𝑑1 2
{ 12 (2-4)
(𝑥22 − 𝑥32 )2 + (𝑦22 − 𝑦32 )2 = 𝑑2 2
解公式(2-4)得到两个二维临时顶点 v3' 和 v3'',坐标分别为(x32a,y32a)与(x32b,y32b)。如
果 curTriangle 为中心三角形,将它垂直映射到平面即 x12 = x1、y12 = y1、x22 = x2、y22 =
y2,根据平面直线 v1v2 的方程可得:
𝑥(𝑥22 − 𝑥12 ) 𝑥12 (𝑥22 − 𝑥12 )
𝑟=𝑦− − 𝑦12 + (2-5)
𝑦22 − 𝑦12 𝑦22 − 𝑦12
分别 将(x3,y3)与(x32a,y32a)代入公式(2-5)中得到结果 r3 与 r32a,计算 r3 与 r32a 的乘积,
如果大于 0,那么 x32 = x32a、y32 = y32a;否则,x32 = x32b、y32 = y32b。
如果 curTriangle 为非中心三角形,临时顶点与 vbase 分别构成的直线作为实际位置
判断的依据,展开的三角形的位置大致情况如图 2-21 所示。
23
江南大学硕士学位论文
2.4.2 单个空间三角形的约束展开方法
约束展开方法是对展开结果的优化,避免出现一个点有多个版本的二维坐标的情
况。当一个点同时作为两个或以上三角形的待求点时,就需要对待求点进行约束。如
图 2-24 所示,点 D 是图中两个三角形的公共点,如果出现 D 点同时为两个三角形的待
24
第二章 经编鞋面网格化曲面的初始展开算法
25
江南大学硕士学位论文
2.5 三角化网格的鞋面初始展开流程
三角化网格鞋面的总体展开流程可以分为如下 6 个步骤:
第一步, 建立三角化网格鞋面的数据结构。
第二步,首先准备 2 个容器:prepareTriangles 为键值对容器:key 存储本轮需要进行
展开的三角形索引集、value 部分存储 key 所对应的基三角形;expendedTriangles 存储已
经完成展开的三角形索引集。
第三步, 确定鞋面的分割线,分离出新的边界边与边界点。
第四步,采用 2.4 小节中的方法确定中心三角形,将它存入 prepareTriangles 中,并
设置已经展开三角形的数量 times。
第五步,获取 prepareTriangles 中待展三角形的数量 n1,以及待求点的数量 n2,如
果 n1 = n2,说明本轮待展三角形中不存在待约束点,采用 2.4.1 小节中的展开方法获取
待求点的二维坐标即可;如果 n1 > n2,说明本轮待展三角形中存在待约束点,查找带约
束点并统计待约束次数,待约束点所有版本二维坐标求取结束后,求这些版本的平均
值作为该待约束点的二维坐标。每展开一个三角形,times 的数量加 1。将本轮中已经
展开的三角形的共边但未展开的三角形存入容器 nextTriangles,当 prepareTriangles 中所
有 三 角 形 都 展 开 后 , 清 空 该 容 器 , 令 prepareTriangles = nextTriangles, 清 空
nextTriangles。
第六步,查看 times 是否小于鞋面上所有三角形的总数或 prepareTriangles 是否为空。
如果不成立,跳转回第五步,否则,鞋面的初始展开流程结束。
采用初始化展开算法,鞋面展开的整个过程,从中心三角形开始,依次迭代展开
共边三角形,直到鞋面的边界,将初始展开过程可视化得到了表 2-2。
表 2-2 初始展开过程迭代
Tab.2-2 The initial expansion process iterates
步数 结果 步数 结果
26
第二章 经编鞋面网格化曲面的初始展开算法
2 30
10 50
20 88
图 2-29 三角化网格鞋面初始展开结果示意
Fig.2-29 The results of the initial expansion of the upper triangular upper are shown
27
江南大学硕士学位论文
表 2-3 三角化网格鞋面初始展开局部示意
Tab.2-3 The initial expansion of the triangular upper is shown locally
部位 1 部位 2 部位 3 部位 4
表 2-3 为展开后的局部放大图,与排版流程中的鞋面较为相似,但三角形网格分布
不均匀,局部有形变问题,展开结果还有较大的优化空间,可以对初始展开结果进行
优化。
2.6 本章小结
将经编提花鞋面离散成三角化网格鞋面,根据鞋面的点、边、三角形和整个鞋面
之间的耦合关系建立相应的数据结构,基于这样的数据结构给出了实现三角化网格鞋
面的初始展开算法:
(1)根据鞋面的内外边界以及排版流程中常用的鞋面形状特点确定了鞋面的切割线,
通过切割线增加了鞋面新的边界边与边界点。
(2)中心三角形的选择对鞋面初始化展开结果有着不可忽略的影响,根据鞋面特点,
建立了适用于鞋面展开的中心三角形搜索方法,文中的示例表明,选取了不同的中心
三角形,鞋面会得到不同的展开效果。
(3)基于欧氏距离建立了三角化网格鞋面单个三角形的展开方法以及整个鞋面的初始
展开流程,得到了三角化网格鞋面的初始展开结果。
28
第三章 鞋面初始展开结果的优化与织物设计
第三章 鞋面初始展开结果的优化与织物设计
三角化网格鞋面初始展开方法中有若干三角形采用了约束展开的方法,初始展开
结果中鞋面的三角化网格分布不够均匀,有较大的优化空间。本章研究如何基于三角
化网格鞋面建立质点-弹簧模型来优化鞋面的初始展开结果,讨论单位时间增量值对鞋
面优化过程中的影响,研究单位时间增量值的选取方法可以使质点-弹簧物理模型达到
平衡状态。得到优化后的鞋面展开结果后,利用展开的鞋面廓形进行贾卡提花组织的
设计与仿真以验证展开算法的有效性。
3.1 质点-弹簧模型的建立
根据三角化网格鞋面可以建立质点-弹簧的应变能模型(如图 3-1)。该模型将网格
上所有的顶点作为质点,所有的边作为弹簧。质点的质量由它所属的三角形面积来决
定,弹簧是拉伸或压缩的状态则是由鞋面初始化展开结果中边的实际长度与三维鞋面
的空间边原始长度进行比较,如果前者比后者长则弹簧处于拉伸状态,前者比后者短
弹簧就属于压缩的状态,前者等于后者时弹簧则处于不受力的状态。建立该模型的意
义就是将处于拉伸或压缩的弹簧沿着受力方向相反的方向进行弹簧能量的释放,通过
不断迭代地释放弹簧的能量最终得到一个趋于平衡状态的质点-弹簧模型,此时就认为
鞋面的初始化展开结果得到了理想的优化结果。
弹簧在初始化展开过程中产生的应变能表示为
𝑁
1
𝑊 = ∑ 𝐾 (𝑑 − 𝑑′)2 (3-1)
2
𝑖=1
在初始展开中某点的受力情况可以表示
𝑁
29
江南大学硕士学位论文
d —— 弹簧联结的两点在初始化展开结果中的距离(平面)
d′—— 弹簧联结的两点在空间上的真实距离(空间)
AVpVq —— 点 Vp 指向点 Vq 的矢量,表示两点构成的边的指向
该模型中弹簧应变能是由两点空间真实距离与初始化展开结果中的距离之差而来,
因此鞋面各部分的展开精度控制可以通过调整弹性变形系数 K 值来实现。
随着初始化展开结果中三角化网格上各点在弹簧产生的应变力作用下逐渐与原始
空间曲面形状慢慢靠近,初始化展开的鞋面在经过质点-弹簧的优化模型以后,最终会
得到变形小、精度高、误差小、无局部折叠的优质展开结果,基于拉格朗日运动方程
(公式(3-3))
𝑴𝑞 + 𝑫𝑞 + 𝑲𝑞 = 𝑔𝑞 + 𝑓𝑞 (3-3)
式中,M—— 整个系统的质量矩阵
D —— 整个系统的阻尼矩阵
K —— 整个系统的刚度矩阵
gq —— 整个系统所受的全部内力
fq —— 整个系统所受的全部外力
针对三角化网格鞋面对公式(3-3)进行优化,忽略原拉格朗日运动方程中的阻尼矩
阵所在项,将系统所受的内外力忽略不计,得到了公式(3-4):
𝑴𝑞 + 𝑲𝑞 = 0 (3-4)
式中,M、K 表示的含义如公式(3-3),且 Kq 为公式(3-2)中的 F 取负值。
Δt 为指定的单位时间增量,当 Δt 无限小时,初始展开结果中的某质点 V 在质点-弹
簧模型上进行优化时的加速度可以被看成一个常数,得到了质点 V 在 t + Δt 时刻上时,
关于公式(3-4)的简化方程组
𝑁
𝜌
𝑚𝑝 = ∑ 𝑆𝑖 (3-5)
3
𝑖=1
𝐹𝑃
𝑎𝑝 (𝑡) = (3-6)
𝑚𝑝
𝑣𝑝 (𝑡 + 𝛥𝑡) = 𝑣𝑝 (𝑡) + 𝛥𝑡𝑎𝑝 (𝑡) (3-7)
2
𝛥𝑡 𝑎𝑝 (𝑡) (3-8)
𝐿𝑃 (𝑡 + 𝛥𝑡) = 𝐿𝑃 + 𝛥𝑡𝑣𝑝 (𝑡) +
2
式中,mp—— V 点的质量
𝜌 —— 待展三角化网格鞋面的密度
Si —— 质点 V 在鞋面中所在的所有三角形的面积,i 为所有三角形中的序号
ap —— 质点 V 在 t + Δt 时刻的加速度
Fp —— 质点 V 在 t + Δt 时刻所受的弹簧应变力
𝑣𝑝 —— 质点 V 在 t + Δt 时刻的速度
Lp —— 质点 V 在 t + Δt 时刻的位置
此外,𝜌与公式(3-2)中的 K 在展开过程中将被作为比例因子,并不是实际意义上
的密度和弹性变形系数。
30
第三章 鞋面初始展开结果的优化与织物设计
3.2 单位时间增量选取的优化
3.1 小节中的方程组可以计算平面三角化网格中某质点 V 在一个确定时间点的加速
度、速度和位置。质点 V 运动终止条件一般设置为两个,满足其中一个,质点 V 的运
动就终止。第一个终止条件为质点 V 位置改变的次数限制,第二个终止条件为整体平
面网格的误差小于设定误差允许的阈值。根据公式(3-7)可以得知,V 的加速度在前一时
刻的加速度上不停的迭代,当三角化网格鞋面接近终止条件二时, 𝑣𝑝 会达到峰值。当
𝑎𝑝 开始递减时,质点 V 仍然按照原来得方向进行运动,有造成发散的风险,质点不稳
定就难以得到理想的结果。毛国栋[52]等人忽略了启动模型时质点的初速度,将 t 时刻到
t + Δt 时刻这段时间的质点运动看作是速度不变的运动即将时刻 t 到时刻 t + Δt 的速度置
为相同,这样可以保证质点 V 的运动方向永远与加速度𝑎𝑝 的方向一致。当质点-弹簧模
型整体趋于平衡时,𝑎𝑝 与𝑣𝑝 都会逐渐递减,具有良好的收敛性且收敛速度较快。经过
上述分析,可将公式(3-7)与(3-8)分别改写为
𝑣𝑝 (𝑡 + 𝛥𝑡) = 𝛥𝑡𝑎𝑝 (𝑡) (3-9)
𝐿𝑃 (𝑡 + 𝛥𝑡) = 𝐿𝑃 + 𝛥𝑡𝑣𝑝 (𝑡) (3-10)
单位时间增量 Δt 是一个未知变量,如果 Δt 取值较大会直接影响最终优化结果的精
度,但如果取值较小又会大大增加算法的时间复杂度。为了增加质点-弹簧模型优化初
始化展开结果的可行性的同时,保证初始化展开结果的优化效率,根据陈功[53]的自适
应时间步长优化策略给出了动态调整不同时刻单位时间增量的方法,具体计算方法如
下:
𝐷last
𝛥𝑡′ = × 𝛥𝑡 (3-11)
𝐷cur
式中,𝛥𝑡 —— 本次迭代优化中的单位时间增量
𝛥𝑡′ —— 下次迭代优化中的单位时间增量
Dlast—— 上一次迭代优化后的综合误差
Dcur—— 当前迭代优化中的综合误差
综合误差是指三角化网格中边长误差的平均值,由公式(3-11)可知,当每一轮迭代
结束后,如果 Dcur < Dlast 说明三角化网格曲面的误差在减小逐渐与空间曲面的形状接近,
可以适当增大单位之间增量;如果 Dlast > Dcur 则说明三角化网格曲面的误差在变大,此
时应该适当降低单位时间增量。
这种动态改变单位时间增量的方法,在每一次优化过程中,都可以得到当前情况
中最优的单位之间增量值,在一定程度上实现了单位之间增量取值的试错成本。在进
行迭代优化的初始阶段,基于公式(3-11)实现的单位时间增量取值优化的算法中,有效
的解决了 Δt 在以前的算法中保持不变而产生的各种问题(时间复杂度过高、在模型趋
于平衡时震荡或三角化网格曲面误差值的发散等)。
3.3 鞋面初始化展开结果的优化步骤与实现效果
基于质点-弹簧物理模型的鞋面整体优化整体流程如下:
31
江南大学硕士学位论文
图 3-2 开发环境展示
Fig.3-2 Development Environment
32
第三章 鞋面初始展开结果的优化与织物设计
图 3-3 程序窗口展示
Fig.3-3 Program window display
图 3-4 基于质点-弹簧的初始展开优化结果
Fig.3-4 Optimization results of initial expansion based on mass-spring
表 3-1 基于质点-弹簧模型的优化局部细节比较
Tab.3-1 Comparison of optimized local details based on the mass-spring
部位 全局位置示意 局部初始化展开效果 局部优化后效果
部位 1
33
江南大学硕士学位论文
部位 2
部位 3
部位 4
34
第三章 鞋面初始展开结果的优化与织物设计
但面积变化不大,说明优化算法基本保持了初始展开的整体形状。
表 3-2 鞋头与整体面积误差比较
Tab.3-2 Comparison between shoe head and overall area error
与三维鞋头面 整体面积 与三维整体面
面积 鞋头面积/cm2
积误差/cm2 /cm2 积误差/cm2
面积(三维) 143.42 0 461.28 0
面积(初始展开 ) 145.54 2.21 430.7 30.58
面积(优化后) 145.18 1.76 432.37 28.91
用欧氏距离来表征三维物体与二维物体之间的相似度也是衡量两者之间误差大小
的方法之一,采用公式(3-12)来表示三维鞋面与二维鞋面之间的相似程度,记为相似值,
相似值越高二维与三维之间得相似度就越低,误差就越大。
𝑛
式中,𝑆𝑑 ——三维与二维鞋面之间的相似值
𝑆3𝑑 ——三角形在三维模型中的面积
𝑆2𝑑 ——对应的三角形在三维模型中的面积
𝑖——三角形的索引
𝑛——三角形的个数
表 3-3 二维鞋面与三维鞋面的表征相似值
Tab.3-3 Characterization similarity between 2D and 3D uppers
相似度 鞋头相似度 整体相似度
三维-二维相似度(初始展开) 0.57 1.73
三维-二维相似度(优化后) 0.33 1.04
由表 3-3 可知,优化后的鞋头与整个鞋面相似值分别为 0.33 与 1.04,分别小于初始
展开的相似值 0.57 与 1.73,可以得出结论,基于质点-弹簧模型的优化算法可以有效降
低初始展开的二维鞋面误差,经过优化的二维鞋面与原始三维模型有着更高的相似性。
综合以上分析,优化算法在保持鞋面整体展开形状的同时,对鞋面内部各三角形
进行调节,使其更接近三维空间中的原始三角形大小。
3.4 经编提花鞋面织物的设计与仿真
3.4.1 贾卡意匠图的设计流程
基于鞋面的展开结果,根据展开的鞋面廓形进行贾卡意匠图的设计。贾卡花型的
意匠图的设计在江南大学 WKCAD 软件中完成,主要分为三个步骤:花型基本参数的
设定、导入二维展开鞋面模型、贾卡组织的覆盖。
首先设计织物的花宽与花高并选择合适的机型,生产鞋面的双针床单贾卡经编机
主要为 RDPJ5/1、RDPJ7/1 等机型,接着导入已经展开的三角化网格鞋面。设置好基本
35
江南大学硕士学位论文
参数之后,贾卡意匠图每个格子的初始颜色都是灰色,表示为贾卡的浮线状态,可以
直接开始设计提花图案。贾卡鞋面上的组织可以组成多种效果,每种图案都是一种组
织类型,在意匠图界面上可以设计几种不同的组织,用色块区分不同的组织并进行组
织的覆盖。
此外,在完成贾卡花型意匠图设计的三个步骤以后,不一定能够呈现出理想的效
果,需要对贾卡边缘进行加固即对在完成组织的覆盖以后要进行贾卡意匠图的包边工
作,可以得到边缘更加清晰的贾卡意匠图。
3.4.2 鞋面织物的工艺参数
(1)鞋面织物的厚度
鞋面织物的厚度由织造时经编机的两个针床的脱圈板距离来决定,一般为 3mm 左
右,这样的鞋面织物弹性好且柔软,具有良好的服用性。除了脱圈板的距离以外,织
造鞋面的间隔丝原料种类与送经量也会影响鞋面织物最终的手感与厚度。
(2)鞋面织物的原料
鞋面织物的地梳、贾卡梳和间隔梳常选用不同的原料,其中间隔梳一般用强力较
好的单丝以提供支撑。在江南大学 WKCAD 的原料对话框中,对纱线种类、名称、粗
细、颜色进行设置。原料的设置可以用于织物仿真,也可以在打印的工艺单中显示,
供车间使用。
(3)穿经、整经的设定
经编中常用穿经形成提花效果,但贾卡经编机上花型主要靠贾卡形成。穿经设置
很少变化。一般将地梳和间隔梳设置为满穿,而贾卡梳为分离梳栉,每个梳栉上的纱
线数量为地梳的一半。
3.4.3 鞋面织物的设计与仿真效果展示
经编提花鞋面的仿真方法通常使用两种方法基于质点-弹簧物理模型的仿真方法与
基于织物的几何特征进行仿真的方法。基于质点-弹簧物理模型的仿真方法通过分析织
物所受的内力与外力对织物本身产生的形变大小来模拟经编提花织物的真实形态;基
于织物的几何特征的仿真方法是通过建立经编提花鞋面的线圈结构的几何模型,获取
线圈的变化规律来实现织物的仿真。建立贾卡提花织物的线圈结构模型,分析它的受
力与形变规律,可以获得较好的仿真效果。为了证明提出的三角化网格鞋面展开算法
的有效性,以两种鞋面模型为例,分别展示两种鞋面的展开效果,根据它们的展开结
果分别设计了相应的贾卡提花组织意匠图,并进行了提花面料的仿真,最终通过纹理
映射技术将仿真图映射至三维鞋面,通过查验设计花型的位置与变形程度来验证展开
算法是否有效。
如图 3-6 为鞋面 1 的三维模型示意,展开后的结果如图 3-7。使用三维鞋面的展开
结果设计了两款贾卡花型意匠图(如图 3-8),接着分别将设计好的意匠图进行仿真(如
图 3-9)。
36
第三章 鞋面初始展开结果的优化与织物设计
图 3-6 三维鞋面模型 1
Fig.3-6 3D upper model 1
图 3-7 鞋面 1 展开结果
Fig.3-7 Result of expanding upper 1
37
江南大学硕士学位论文
像中所对应的像素位置。当获取一个平面的二维模型后,根据它的二维坐标计算它对
应的纹理坐标,计算 x 坐标的方法如公式(3-13),y 坐标的方法如公式(3-14)。
图 3-10 纹理映射坐标系
Fig.3-10 Texture mapping coordinate system
𝑥 − 𝑥min
𝑢= (3-13)
𝑥max − 𝑥min
𝑦 − 𝑦min
𝑣 =1− (3-14)
𝑦max − 𝑦min
式中,x、y 分别为待求纹理坐标的二维坐标值,u 为代入的二维 x 坐标值对应的
纹理坐标,v 为代入的二维点的 y 坐标值对应的纹理坐标,xmin 与 xmax 为二维模型中 x
坐标的最小值与最大值,ymin 与 ymax 分别为二维模型中 y 坐标的最小值与最大值。
38
第三章 鞋面初始展开结果的优化与织物设计
与鞋跟的花型位置基本贴合二维鞋面设计的花型,且形变较小、花型位置正确,验证
了展开算法是有效的。
除了鞋面 1 以外,对无鞋舌的鞋面 2(如图 3-13)进行展开,接着进行提花意匠图
的设计并仿真(如图 3-14),通过纹理映射技术得到了如图 3-15 的效果图,花型位置基
本正确且花型形变较小。
图 3-13 三维鞋面模型 2
Fig.3-13 3D upper model 2
39
江南大学硕士学位论文
3.5 本章小结
对三角化网格鞋面初始展开结果进行优化,得到网格分布更加均匀的优化展开结
果。构建了适合三角化网格鞋面的质点-弹簧物理模型,给出了求取鞋面上各质点质量、
加速度、速度与位置的方法。讨论了两次优化之间单位时间增量的选取方案,如何根
据每次迭代结果后对单位时间增量进行合理的调整,给出了确定每一次优化的单位时
间增量的计算方法。使用三角化网格鞋面最后的展开廓形进行经编贾卡提花组织的设
计并对设计结果进行了仿真,得到了二维鞋面织物的仿真效果图,为了证明初始展开
与优化算法的有效性,将二维仿真鞋面织物映射还原至三维鞋面模型中,提花图案位
置正确,形变较小,验证了算法的有效性。
40
第四章 经编提花鞋面自动排版算法的研究与实现
第四章 经编提花鞋面自动排版算法的研究与实现
前文得到的鞋面作为编织单元直接用于生产,会造成原料的浪费,生产实践中,
需将鞋面紧凑地排列在布面上,以提高生产效率,降低成本。通过分析经编织物的特
性,对经编提花鞋面的排版方法进行研究,给出规则正排、交替正排和交替对排的三
种排版方法,给出经编提花鞋面材料利用率的计算方法并基于提取鞋面的区域边界的
方式,研究鞋面排版时如何放置的详细流程,得到三种排版方式中鞋面放置的精准位
置。基于鞋面排版可并行化的特征,利用 CUDA 实现鞋面的自动化快速排版。
4.1 经编提花鞋面的排版方式
在经编织物中,纱线总体沿纵向编织,横移仅在小范围内发生,因此旋转被排列
的对象会扩大横移的范围从而改变织物的外观。图 4-1(a)为原始意匠图,图 4-1(b)和图
4-1(c)为旋转 180°和 90°后的意匠图。图 4-2(a)-(c)分别为图 4-1(a)-(c)垫纱效应图局部,
三者在白色区域均通过贾卡偏移形成了网眼组织。但图 4-2(a)-(c)的“A”中间的横杠由
三个小网孔组成,而图 4-2(c)中间的横杠则由一个纵向大网孔组成。因此,在实际生产
时只可对鞋面做 180°的旋转,以保证生产与原始效应相似的织物外观。其他角度的旋
转会产生期望外的外观,通常不采用。
41
江南大学硕士学位论文
编织物编织时会产生弓形斜,后整理时的张力也会引起线圈的倾斜。因而各工序需检
查织物的倾斜情况并及时调整,以获得高品质且数据准确的理想织物。同时,生产时
为了随时进行查验,通常会在排列一定数量的鞋面之后插入一个不同组织的分隔区作
为参考线,如图 4-4。
图 4-4 鞋面排版分隔区(以规则正排为例)
Fig.4-4 Shoe upper layout division area
4.2 经编提花鞋面的材料利用率
面料利用率是指面料上鞋面区域面积占总面积的比例。鞋面排版的目的即是为了
获得较高的利用率,减少裁剪废料的面积。经编机较宽,通常多布幅同时编织。生产
经编提花鞋面时,一幅布的幅宽是预先确定的常量,一般为 1.2 米左右。为给工艺设计
人员提供更直观的数据,本文不采用面积比率表示利用率,而是将 480 横列中的鞋面双
数作为面料利用率高低的衡量依据,单位为双/腊克。在相同宽度的一幅布上,排列一
定数量的同款鞋面,480 横列中排列的鞋面越多则表明面料利用率越高,即可以用较少
的横列编织较多的鞋面。鞋面在进行排版时,各个鞋面之间不宜相隔太近,否则会影
响裁剪;也不宜相隔太远,否则会降低面料的利用率[54]。
𝑀
𝑈= × 480 (4-1)
𝐻
式中:U—面料的利用率
M—一个高度循环中鞋子的双数
42
第四章 经编提花鞋面自动排版算法的研究与实现
H—表示一个高度循环中的横列数。
4.3 鞋面的自动排版算法
鞋面的排列过程即是不断调整待排列鞋样位置,使其最大程度靠近已排列鞋样,
但同时又不能发生碰撞。本文的碰撞检测算法的基本思想是通过判断待排列鞋样的边
界点是否位于已排列鞋样区域来判断最佳的放置位置。
4.3.1 提取鞋面的区域和边界
经编提花鞋面图案的设计采用意匠图进行绘制。通常情况下,一个意匠格表示一
枚贾卡导纱针在两个横列中的动作。意匠图中 0 号色的意匠格为背景色,非 0 号色的部
分为鞋面区域,可以对不同的色号定义动作,使其代表不同的组织结构。
4.3.2 鞋面排列的流程
为方便成品的裁剪,鞋面在排列时相邻的鞋面之间要间隔指定针数和横列数。用
Wdis 表示鞋面之间最小间隔针数,H'dis 表示鞋面之间最小间隔横列数,Hdis 表示鞋面
之间纵向间隔的最小意匠格数。常规情况下,工艺中一个意匠格表示两个横列,故
Hdis=H'dis/2,后文中都使用以意匠格为单位的 Hdis 表示指定的纵向最小间隔距离。
在规则正排的排列方式中,第一排放置左脚鞋面,第二排放置右脚鞋面,则每一
排鞋面数量为
𝑊𝑓𝑎𝑏𝑟𝑖𝑐 + 𝑊𝑑𝑖𝑠
𝑁𝑥 = [ ] (4-2)
𝑊𝑠ℎ𝑜𝑒 + 𝑊𝑑𝑖𝑠
式中:[ ]— 取整数部分
Nx— 鞋子的双数
Wfabric—鞋面放置区域宽度即幅宽减去两侧布边的宽度
Wshoe—一个鞋面的宽度(如图 4-6)。
43
江南大学硕士学位论文
图 4-6 鞋面排列各距离标注示意图
Fig.4-6 Schematic diagram of each distance labeling of shoe upper arrangement
鞋面的放置位置用鞋面最小外接矩形左下角意匠格在意匠图上的位置表示。第一
排鞋面放置在意匠图上第一行,第二排鞋面放置的位置则需要通过计算得到。鞋面排
放的具体流程为:先放置好第一排的鞋面,第二排的鞋面在第一排的基础上采用碰撞
检测的方法对其边界点逐一进行判断,检测到碰撞后则将第二排鞋面向上移动一行,
直到找到与第一排距离最近且不发生碰撞即为最佳的放置位置,具体流程如图 4-7。
图 4-7 第二排鞋面放置流程图
Fig.4-7 The second row of shoe upper placement flow chart
上图中,碰撞检测即为检查第二排鞋面各边界点与第一排鞋面的距离是否满足最
小间隔针数和最小意匠格数的要求。本文通过对第一排鞋面进行膨胀预处理代替距离
的计算,第二排鞋面的边界点位置如存在膨胀后第一排鞋面的意匠格,则表明发生了
碰撞。
膨胀处理使用菱形结构,菱形的水平对角线长度为 2Wdis+1,垂直对角线高度为
2Hdis+1。如图 4-8 为两种不同 Wdis 和 Hdis 构成的膨胀结构。膨胀在第 4.4.1 节获得的第
一排鞋面边界点上进行,逐边界点生成膨胀边缘。图 4-8(a)为膨胀前的第一排鞋面,图
44
第四章 经编提花鞋面自动排版算法的研究与实现
4-9(b)为膨胀边界和原鞋面的并集。碰撞检测时只需要判断第二排的边界点是否与图 4-
9(b)重叠即可,不需计算距离。
为了减少工作量提高效率,在对鞋面的边界进行膨胀时,对其边界的第一点进行
膨胀后,在后续的操作中仅需对与前一边界点操作中的不重复部分进行填充即可。
45
江南大学硕士学位论文
图 4-10 交替正排奇数只鞋排列示意图
Fig.4-10 Schematic diagram of arrangement of odd-numbered shoes in alternating rows
当排列鞋面数量为偶数双鞋时,第一排鞋子以最大间隔距离放置不一定是最优解,
因此应对每种允许的间隔距离做一次排版运算,选取面料利用率最高的。对某一种间
隔距离,第二排鞋横向可移动范围
𝑁𝑠 𝑁𝑠
𝐸 = 𝑊𝑠ℎ𝑜𝑒 − 𝑊𝑠ℎ𝑜𝑒 ×
− 𝑋′𝑑𝑖𝑠 × ( − 1) (4-4)
2 2
式中:X'dis 为同一排中相邻鞋的横向间隔距离,取[Wdis ,Xdis]内的任意值,Ns 为
排列的双数,取偶数且 Ns∈[Nx,2Nx](如图 4-11)
偶数双鞋排版时,除第二排鞋可以横向移动外,第一排鞋也可以在范围 E 内横向
移动,即第一排的第一只鞋可以不贴近布边放置。故在排版时存在三个移动,第一排
鞋的横向移动,第二排鞋的横向移动,第二排鞋的纵向移动。给定鞋面双数后,最多
存在 T 种放置情况:
𝑋𝑑𝑖𝑠
图 4-11 交替正排偶数双鞋排列示意图
Fig.4-11 Schematic diagram of arrangement of even-numbered shoes in alternating rows
由公式(4-5)可知,在偶数双鞋交替排列时,时间复杂度较高,这是因为,鞋面在
移动范围 E 中,上下两排鞋面会重复出现很多次相对位置相同的情况,例如图 4-12(a)
与图 4-12(b)移动了不同的距离即 S1 与 S2 不相等,但是鞋面的相对位置没有发生改变,
46
第四章 经编提花鞋面自动排版算法的研究与实现
4.3.3 鞋面排列算法的并行实现
在鞋面排列算法中,为找到最高利用率的排列方式,每一种放置鞋面的位置都要
进行一遍碰撞检测,计算量大。分析可知,某一放置位置的检测与其它位置无关,某
一边界点的碰撞检测与其它边界点无关,因而可以方便地进行并行实现。
并行处理是相对于串行处理,是指用多个计算资源来协同解决同一个计算问题,
该问题被分解成若干个部分,可以同时进行处理。每部分都用一系列指令来完成,每
部分在不同处理器上同时执行。它的目的是提高计算速度,将复杂任务进行拆分,从
而来提高解决问题的效率[57]。本文针对鞋面排版问题进行并行计算的设计,确保运行
的流畅和效率。
想要鞋面排列算法可以并行实现就需要了解 CPU 与 GPU 的性能。GPU 最开始是显
卡上的芯片,主要用来解决计算机图形并行的相关问题。随着技术的不断迭代,如今
47
江南大学硕士学位论文
已经成为并行计算中提高效率,优化性能的图形处理器。CPU 则是另一个独立的处理
器(中央处理器),单个 GPU 无法完成特定的计算任务,需要依赖 CPU 的运行实现对
图像的处理,必须通过与 CPU 连接 PCIe 总线后才能进行具体的操作,因此通常称 GPU
为设备端,CPU 为主机端。CPU 与 GPU 之间的关系称为异构关系,通过建立这种关系
对图形进行协同计算。异构应用主要包含了主机代码与设备代码,在设备端加载密集
性的计算任务之前,主机端(CPU 端)负责设备端(GPU 端)的运行环境、代码和数
据。CPU 与 GPU 的应用范围主要从两方面区别即数据规模的大小与是否并行。CPU 适
合处理控制逻辑复杂且数据规模较小的任务,GPU 则适合处理并行的控制逻辑简单但
数据规模较大的任务。
本文的并行算法基于英伟达公司的通用并行计算架构CUDA实现,它借助GPU解
决大规模的计算问题。CUDA主要包含三部分:CUDA的函数库、运行时API与驱动
API。三个部分的层次如图4-13。
图4-13 CUDA软件体系
Fig.4-13 CUDA software systems
CUDA是层次化线程的集合,可以实现存储共享和数据同步进行。CUDA的最小执
行单位是线程thread,若干个线程组成了线程块block,若干个线程块又组成了线程网格
grid。基于GPU上的CUDA执行命令的函数称为核函数kernel[58]。在每个核函数中包含
了两个并行层次即各线程块之间的并行和各线程之间的并行,当核函数进行并行计算
时,线程网格上的线程块都使用不同的数据来计算同一指令[59]。若将鞋面排版中的碰
撞检测这一过程视为核函数,则核函数如下:
function detectKernel(...)
y <- threadIdx.x
x <- blockIdx.x
if(y > selY)
退出线程
for each p in 边界点数量
posX <- x+borderPt[p].x
48
第四章 经编提花鞋面自动排版算法的研究与实现
4.4 实验结果与分析
排版算法实验平台硬件环境为 Intel Core I7-6700HQ,NVIDIA Quadro M1000M;软
件环境为 Windows 10,CUDA 10.0。选用的经编机宽为 140 英寸,机号为 E24,编织幅
数为 3 幅,布边宽度为 40 针。通过计算可得,每幅布为 1120 针,鞋面放置区域可用针
数为 1040 针。
设置鞋面之间的最小间隔参数,左右最小针数 Wdis 为 10,上下相隔意匠格数 Hdis
为 10。展开鞋面的意匠图宽 279,高 262,并计算该鞋面使用这三种排版方式的利用率
(如图 4-14 所示),排版示设计图 4-15 所示(以交替对排为例),得到了该鞋面三种排
版方式的利用率(如表 4-1)。
表4-1 展开鞋面的利用率
Tab.4-1 utilization rate of the expanding upper
鞋面排版方式 高度/格 利用率/(双/腊克)
规则正排 1078 0.67
交替正排 1314 0.73
1084 0.89
交替对排
1384 0.87
49
江南大学硕士学位论文
图 4-14 展开鞋面的排版示意
Fig.4-14 Expanding the layout of the upper
图 4-15 展开鞋面排版设计结果
Fig.4-15 Expanding the layout of the upper
此外,为了证明算法对不同形状鞋面排版的有效性,还使用了表 4-2 与 4-3 是两个
实例的排版结果。表 4-2 为常规鞋面 A,意匠图宽 230,高 234。表 4-3 为倾斜鞋面 B,
意匠图宽 209,高 475。
表 4-3 倾斜鞋面 B 排版示意图
Tab.4-3 Shoe upper B layout diagram
B-a B-b B-c B-d B-e B-f B-g B-h B-i
50
第四章 经编提花鞋面自动排版算法的研究与实现
1 3.14 3.42
2 2.64 2.81
3 1.32 1.65
51
江南大学硕士学位论文
成为最优的排列方法,使得布料的利用率达到最高。
表 4-7 CPU 串行与 CUDA 并行耗时比较
Tab.4-7 Comparison of CPU serial and CUDA parallel time consuming
鞋面编号 CPU 单线程/ms CUDA 并行/ms
A 2968 1056,核函数 196
B 11094 1330,核函数 276
表 4-7 为相同的排版方法使用 CPU 单线程实现和使用 CUDA 实现的耗时对比。不
同形状和大小的鞋面排版时耗时不同,从表中可知,鞋面 B 的耗时总体大于 A。在单
线程实现时排版 B 比排版 A多耗时 8秒,但并行实现时因为主要的计算可由 GPU加速,
所以增加的时间不多。表中还可发现,CUDA 实现时,核函数实际耗时较少,而大部
分的时间消耗在数据的准备和传输过程中。
4.5 本章小结
介绍了经编提花鞋面 3 种排版方法,给出了规则正排、交替正排和交替对排的对应
排版算法流程。通过 CUDA 并行化,提高了经编提花鞋面排版时的执行效率,实现了
排版的自动化,通过程序计算得到鞋面精确的放置位置提高了织物原料的利用率。基
于经编提花鞋面的形状特性,本章以两款鞋面为例,经过实验得出,鞋面大小,排列
方法等因素都会影响最终利用率。规则正排不一定是最优的排版方法,但其他两种方
法也不总优于规则正排,实际生产中应根据具体情况来选择排版方法。
52
第五章 总结与展望
第五章 总结与展望
5.1 结论
本课题建立了基于欧氏距离的经编运动鞋鞋面二维展开的算法,根据三维的鞋面
模型得到二维的鞋面轮廓,对展开鞋面模型进行经编提花面料的设计并仿真,将仿真
图映射到三维模型得到了三维提花面料的鞋面模型,证明了展开算法的有效性。介绍
了对展开的单只鞋面进行排版的方法,通过 CUDA 并行程序提高了鞋面排版效率,实
现了排版的自动化、提高了织物原料的利用率,证明了鞋面利用率最终会受鞋面大小、
排列方法等因素的影响,实际生产要根据具体情况来选择排版方式。主要完成的工作
如下:
(1)获取三维三角化网格鞋面模型,解析模型 obj 文件并建立适用于三维鞋面展
开算法的数据结构,给出了构建边信息的方法;根据鞋面的几何特性与制鞋工艺需求,
基于内外边界搜索的方式给出了针对鞋面的切割方法;研究了鞋面展开中心三角形的
搜索方法,证明了选取不同位置的中心三角形对鞋面的初始展开结果有着较大的影响;
建立了一种基于欧氏距离的鞋面初始展开方法,给出计算鞋面中单个三角形自由展开
方法、约束展开方法以及在初始化展开过程中如果不构成三角形时的处理方法,最后
给出了整个鞋面初始展开的具体步骤,并得到了相应的展开结果。
(2)基于初始展开结果,利用经典的物理模型质点-弹簧对鞋面的初始化展开结
果进行优化,改善了初始化展开中网格分布不均匀的问题。首先建立了质点弹簧的优
化模型,求取了鞋面上各质点质量、加速度、速度与位置的方法。接着,给出了如何
选取两次迭代次数之间的单位时间增量,以及如何根据每次迭代结果后对单位时间增
量进行合适的调整方法。最后以三角化网格鞋面的展开结果为廓形进行经编贾卡提花
组织的设计并仿真,得到了二维经编提花鞋面织物,将该鞋面织物纹理映射至对应的
三维鞋面,花型位置正确且形变较小,验证了本算法的有效性。
(3)介绍了经编提花鞋材的排版方法,给出了规则正排、交替正排和交替对排的
鞋面排列算法流程。基于 CUDA 并行化,提高了经编提花鞋材排版时的执行效率,实
现了排版的高效自动化,通过程序计算得到鞋面合理的放置位置提高了织物原料的利
用率。经过实验得出,鞋面大小,排列方法等因素都会影响最终利用率。规则正排不
一定是最优的排版方法,但其他两种方法也不总优于规则正排,实际生产中应根据具
体情况来选择排版方法。
5.2 展望
鞋面是一个非连续的多边界复杂曲面,展开难度大于一般的连续规则曲面,且由
于经编提花织物的特殊性,在生产过程的排版也不如其他材料的样品一样可以随意旋
转。根据鞋面的具体特征提出了适用于常规版型鞋面的展开算法与快速排版算法,取
得了一定的进展但仍然有以下方面的不足:
(1)不适合曲线变化丰富且复杂的鞋面展开,该算法更加适合变化平缓的常规版
53
江南大学硕士学位论文
型运动鞋,具有一定的局限性。为设计复杂鞋面展开和实现鞋面展开算法的通用性提
供了思路,算法仍有较大的优化空间。
(2)本文的算法采用以单个三角形为单位逐个展开,整体流程时间复杂度较高,
今后关于鞋面展开的研究可以着手以三角长带为单位进行研究,如果展开过程中出现
不理想的效果也能够以三角带为单位进行排查,既可以降低展开的时间复杂度,又可
以减少排查错误时的工作量。
(3)排版算法在企业应用后发现,一些情况下,因鞋材放置组合很多,仍然需要
消耗数秒才能执行完成,因此后续需要进一步来优化鞋面排版的相关算法来减少用户
的等待时间,提升使用体验。
54
致谢
致谢
时光飞逝,转眼研究生生涯已经接近尾声,两年半的学习生活使我受益匪浅,经
过一整年时间的磨砺,我的硕士毕业论文已经进入了尾声,这期间我得到了许多的关
怀与帮助,使我终身受益。
2020 年我很幸运的成为了一名硕士研究生,这是我人生一个重大的转折,让我得
以在漫漫人生之路又迈上了一个台阶,有了新的起点。感谢江南大学这个大平台,让
我经过两年多的熏陶开阔了眼界,打开了人生格局,有了更多选择的机会。接着,我
要感谢针织中心给我提供的科研工作环境,以及浓厚的学术氛围,在为期两年多的科
研生涯中,非常荣幸和针织中心的老师与同学共同探讨学术问题并一起进步,对此我
常怀感激之心。
我在江南大学读研期间,最感谢的就是我的导师张爱军,他为人谦和,平易近人,
对待学术问题严谨认真,对待工作精益求精。从我初来乍到的懵懂无知,到如今略微
学有所成这都离不开张老师的悉心指导。关于我的课题,这期间遇到的难题,以及目
标的实现张老师都给予了我非常多的帮助,但同时他又给我了一定的独立思考空间以
及相对自由的科研氛围,让我可以自主的安排学习计划。这样的相处模式让我感到十
分舒适,也让我在对于课题的研究可以发挥巨大的潜力。如今研究生生活即将结束,
我收获的每一点成就都离不开张老师的汗水与心血。在此,谨向我最敬爱的张老师表
达诚挚的感激之情并致以最崇高的敬意。
最后,我要感谢教研室的同学们,感谢他们为我的科研生活提供的各种帮助。不
论何时,面对生活上的困难,他们都能给我及时的帮助,没有他们的帮助,我的研究
生生涯也不会如此的顺利。同时还要感谢我的父母、爷爷奶奶以及从小到大的多年挚
友,他们是我最亲最爱的人,在我无助迷茫的时刻可以得到他们诚恳的建议与指引,
在我受到挫折对我精神上的慰藉,以及生活的诸多方面对我的无私奉献,他们不管在
我的人生高光时刻还是跌入谷底时都扮演着重要的角色,没有他们就没有今天的我,
他们也是今后我继续努力迈上新征程的重要动力。
55
参考文献
参考文献
56
参考文献
57
参考文献
58
附录
附录一: 作者在攻读硕士学位期间发表的论文
59
附录
附录二: 课题程序代码(展开)
//一、中心三角形的搜索方法
double* CShoe3DView::findCenterVertex(){
CShoe3DDoc* pDoc = GetDocument();
double Xmax = -100000000;
double Xmin = 1000000000;
double Xmid = 0;
double Ymin = 100000000;
double Ymax = -10000000;
double Ymid = 0;
double Y ;
for(int i = 0;i < pDoc->upper.u_vertices.size();i ++){
double x = pDoc->upper.u_vertices[i].Vbefore[0];
double y = pDoc->upper.u_vertices[i].Vbefore[1];
if(x > Xmax) Xmax = x;
if(x < Xmin) Xmin = x;
}
Xmid = Xmin + ((Xmax - Xmin) / 2);
vector<int> edBoundary;
for (int i = 0; i < pDoc->upper.u_edges.size();i ++){
int n = 0;
for (int j= 0; j < pDoc->upper.u_triangles_.size();j ++){
if(pDoc->upper.u_triangles_[j].edgeID[0] == i) n ++;
else if(pDoc->upper.u_triangles_[j].edgeID[1] == i) n ++;
else if(pDoc->upper.u_triangles_[j].edgeID[2] == i) n ++;
}
double edx1 = pDoc->upper.u_vertices[pDoc->upper.u_edges[i].Vedge[0]].
Vbefore[0];
double edx2 = pDoc->upper.u_vertices[pDoc->upper.u_edges[i].Vedge[1]].
Vbefore[0];
if(n == 1 && ((Xmid > edx1 && Xmid < edx2)||
(Xmid > edx2 && Xmid < edx1))) edBoundary.push_back(i);
}
for(int i = 0;i < edBoundary.size()-1;i ++){
for(int j = 0;j < edBoundary.size()-1-i;j ++){
double eby1 = pDoc->upper.u_vertices[pDoc->upper.u_edges[edBoundary[j]].
Vedge[0]].Vbefore[1];
double eby2 = pDoc->upper.u_vertices[pDoc->upper.u_edges[edBoundary[j +
1]].Vedge[0]].Vbefore[1];
if(eby1 > eby2){
60
附录
61
附录
Vbefore[1];
double y2 = pDoc->upper.u_vertices[pDoc->upper.u_triangles_[i].vertexID[1]].
Vbefore[1];
double y3 = pDoc->upper.u_vertices[pDoc->upper.u_triangles_[i].vertexID[2]].
Vbefore[1];
double y[] = {y1,y2,y3};
for(int j = 0;j < 2;j ++){
int minIndex = j;
for(int m = j + 1;m < 3;m ++) {
minIndex = y[m] < y[minIndex]? m:minIndex;
double tmp = y[j];
y[j] = y[minIndex];
y[minIndex] = tmp;
}
}
if(((y[0] < yC)&&(y[2] > yC))||(yC == y[0] || yC == y[1] || yC == y[2]))
firstTriangle = i;
}
}
delete []cvertex;
return firstTriangle;
}
62
附录
附录三: 课题程序代码(排版)
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include "cuda_texture_types.h"
#include <time.h>
#include <vector>
using namespace std;
#include <stdio.h>
#include "gStruct.h"
extern "C"
cudaError_t creatPaper2GPUCuda(int paperMaxHeight,int paperMaxWidth)
{
cudaError_t cudaStatus;
cudaStatus = cudaMalloc((void**)&paperGPU, sizeof(unsigned char)*
paperMaxHeight*paperMaxWidth);
return cudaStatus;
}
extern "C"
cudaError_t copyPaper2GPUCuda(vector<unsigned char> &tmpPaper, int paperHeight, int
paperWidth)
{
cudaError_t cudaStatus;
cudaStatus = cudaMemcpy(paperGPU, &tmpPaper[0], sizeof(unsigned char)*
paperHeight*paperWidth, cudaMemcpyHostToDevice);
return cudaStatus;
}
extern "C"
cudaError_t freePaperGPUCuda()
{
cudaError_t cudaStatus = cudaSuccess;
cudaStatus = cudaFree(paperGPU);
return cudaStatus;
63
附录
}
__constant__ short2 constEdgePts[2048];
extern "C"
cudaError_t copyEdge2GPUCuda(vector <short2 > &curRowEdgePts)
{
cudaError_t cudaStatus;
int num1 = curRowEdgePts.size();
cudaStatus = cudaMemcpyToSymbol(constEdgePts, &curRowEdgePts[0],
sizeof(short2)*num1);
return cudaStatus;
}
extern "C"
cudaError_t freeEdgeGPUCuda()
{
cudaError_t cudaStatus = cudaSuccess;
return cudaStatus;
}
extern "C"
cudaError_t creatPose2GPUCuda(int posesMaxSize)
{
cudaError_t cudaStatus;
int num2 = posesMaxSize;
cudaMalloc((void**)&posesGPU, sizeof(char)* num2);
cudaMemset(posesGPU, 0, sizeof(char)* num2);
cudaMalloc((void**)&selJGPU, sizeof(unsigned int) * 2);
cudaStatus = cudaMemset(selJGPU, 0xff, sizeof(unsigned int) * 2);
return cudaStatus;
}
extern "C"
cudaError_t setPose2GPUCuda(int posesSize)
{
cudaError_t cudaStatus;
int num2 = posesSize;
cudaStatus = cudaMemset(posesGPU, 0, sizeof(char)* num2);
return cudaStatus;
}
extern "C"
64
附录
cudaError_t freePoseGPUCuda()
{
cudaError_t cudaStatus;
cudaFree(posesGPU);
cudaStatus = cudaFree(selJGPU);
return cudaStatus;
}
65
附录
if (val != 0)
{
return;
}
}
posesGPU[j*(moveRange + 1) + mk] = 1;
atomicMin(&selJGPU[0], j);
}
extern "C"
cudaError_t doCuda(int posesSize, vector <unsigned int> &selJ, int startYScan,int endYScan,
int curRowEdgePtsSize, short edgeXOffset, int paperHeight,int paperWidth, int moveRange,
int centerK)
{
cudaError_t cudaStatus;
doKernel <<< moveRange+1, endYScan - startYScan + 1 >>>(startYScan, endYScan,
curRowEdgePtsSize, edgeXOffset, paperHeight, moveRange,
paperGPU, curRowEdgePtsGPU,posesGPU, selJGPU);
get_KandJ_Kernel << < 1, 1 >> >(moveRange, centerK, posesGPU, selJGPU);
cudaStatus = cudaMemcpy((void *)(&selJ[0]), selJGPU, sizeof(unsigned int)*2,
cudaMemcpyDeviceToHost);
return cudaStatus;
}
66