You are on page 1of 73

全日制专业硕士学位论文

题 目:
经编鞋面织物的曲面展开与排版算法研究

英文并列题目: Research on Surface unfolding and layout


algorithm of warp knitted uppers

研 究 生: 吴妙缘 专业领域: 纺织工程


研 究 方 向: 数字化纺织技术
导 师 ① 姓 名: 张爱军 职 称: 副研究员
导 师 ② 姓 名: 杨兴财 职 称: 高级工程师
学位授予日期:

答辩委员会主席:

江 南 大 学
地址:无锡市蠡湖大道 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
目录

4.2 经编提花鞋面的材料利用率 .................................................................................... 42


4.3 鞋面的自动排版算法 ................................................................................................ 43
4.3.1 提取鞋面的区域和边界 ..................................................................................... 43
4.3.2 鞋面排列的流程 ................................................................................................. 43
4.3.3 鞋面排列算法的并行实现 ................................................................................. 47
4.4 实验结果与分析 ........................................................................................................ 49
4.5 本章小结 .................................................................................................................... 52
第五章 总结与展望 ................................................................................................................. 53
5.1 结论 ............................................................................................................................ 53
5.2 展望 ............................................................................................................................ 53
致谢 .......................................................................................................................................... 55
参考文献 .................................................................................................................................. 56
附录一: 作者在攻读硕士学位期间发表的论文 .................................................................... 59
附录二: 课题程序代码(展开) ............................................................................................ 60
附录三: 课题程序代码(排版) ............................................................................................ 63

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]。

(a) 可展曲面 (b) 不可展曲面


图 1-2 不同类型曲面样例[7]
Fig.1-2 Examples of different types of surfaces[7]

(a) 鞋面模型 (b) 部位○


1 (c) 部位○
2
图 1-3 鞋面不同部位的易展度
Fig.1-3 Flexability of different parts of the upper
曲面展开技术中,为了增加不可展的复杂曲面在初始化展开过程中的可行性,为
后续曲面的整体优化提供一个较完美的展开结果,需要按照一定的方法对曲面进行切
割。复杂曲面的分割体现了经典算法中分治的思想即将一次性难以解决的问题拆分为
若干个较为容易解决的问题。随意选取分割线也许并不能改变复杂曲面的展开精度,
因此分割线的选择也有一定的准则,通常会选择曲面上平均高斯曲率较高的部分作为
分割线的选取区域,这样可以有效的减少曲面展平的变形程度。除此之外,切割必然
会使曲面产生更多的边界,因此合理的分割线选取,应在满足上述切割准则的同时尽
可能增加较短的边界。经过切割的鞋面在一定程度上提高了它的可展性,为初始化展
开提供更优质的三角网格曲面,增加后续流程可行性的概率[8]。

2
第一章 绪 论

(a)模型 1 切割线 (b)模型 2 切割线 (c)模型 3 切割线


[8]
图 1-4 多边界曲面切割线选取示意图
Fig.1-4 Schematic diagram of surface cutting line selection[8]
各种类型的经编运动鞋紧贴鞋楦的鞋面缝合都是基于立体裁剪,在曲面展开技术
出现之前,获取展开鞋面的方法是首先等比例的画出待展鞋面的放样图,接着根据工
艺人员的经验绘制出展开图,为了得到更加贴合设计的鞋面,将绘制的展开图进行反
复的缝合、修改不断得到新的平面展开图直到可以近似完美的贴合设计出的鞋面。但
这种展开方法有较大的局限性,在制备过程中需要不停的更换鞋面样片,同时工作量
会严重依赖工艺人员的经验,造成生产效率低下,交付时间难以保证等诸多痛点[6]。随
着计算机图形领域日益发展,关于曲面展开技术研究的日渐深入,出现了针对不同类
型曲面的展开技术。面向曲面展开的研究对象一般分为数值型曲面与三角化网格曲面
两种类型,因三角化网格曲面可轻易的抽象成经典的数据结构——无向图,便于图相
关的算法在曲面上更好的应用,综合考虑鞋面展开的展开过程的难易程度与展开结果
的精度,三角网格化的鞋面更适合展开鞋面展开的应用场景[10]。
为适应实际生产需求,获取二维展开的鞋面后需要进行上机织造,一幅布可以排
列多个鞋面,在织物 CAD 中手动拖动鞋面进行排列的方式较为繁琐,在得到二维鞋面
后,为了节省原料提高布料的利用率并快速得到每个鞋面的精准放置位置,就需要研
究鞋面的快速自动排版算法。

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]。

(a) 展开初始三角面片带 (b) 展开相邻普通三角面片带 (c) 展开更多的普通三角面片带


图 1-7 三角带展开原理图[37]
Fig.1-7 Schematic diagram of triangle belt expansion[37]
前文列出了目前可行性较高的曲面初始展开算法,不同的领域针对提出了侧重点
不同的展开方法。陈动人等提出的展开方法使复杂曲面经过切割后,可以得到误差较
小的展开结果但是会破坏曲面的完整性;Sheffer 等人的曲面展开算法解决了复杂曲面
展开过程中出现的三角形折叠现象但是展开结果可能与三维模型尺寸产生较大的误差,
Levy 等人的展开算法适用范围更小,只能用于可切割的曲面;Olga 等人的方法则是通

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 所示。

图 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 的处
理。

图 2-1 obj 文件部分三维点坐标与索引次序示意


Fig.2-1 obj file part 3D vertices coordinates and index order diagram
(2)如图 2-2,obj 文件中的 f 即为三角化网格曲面中的单个三角形信息,分别表
示三角形三个顶点对应顶点的索引次序。f 中的索引可以为正数也可以为负数,当使用
负数索引时,使用公式(2-1)对负数索引进行处理以便于后续的计算。

10
第二章 经编鞋面网格化曲面的初始展开算法

图 2-2 obj 文件部分三角形三点索引信息


Fig.2-2 Three-point triangle index information in obj file

𝑉𝑖𝑛𝑑𝑒𝑥 = 𝑛 − |𝑉𝑐𝑢𝑟𝐼𝑛𝑑𝑒𝑥 | (2-1)


式 中 , 𝑉𝑖𝑛𝑑𝑒𝑥 为 将 𝑉𝑐𝑢𝑟𝐼𝑛𝑑𝑒𝑥 转 化 为 正 数 后 的 值 , 𝑛 为 鞋 面 上 顶 点 的 总 数 ,
𝑉𝑐𝑢𝑟𝐼𝑛𝑑𝑒𝑥 为点的负数索引。
除了需要取得每个顶点的三维坐标和构成每个三角形的三格顶点的索引,还需要
构建每个三角形的边信息。3D 鞋面模型的 obj 文件中未包含每个三角形的边信息,需
要在顶点与三角形的基础上构建鞋面的边类用于更好的联结顶点与三角形面。

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)。

图 2-4 边信息构建完成的 u_edges 元素数量示意


Fig.2-4 Indicates the number of u edges elements constructed by side information

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
江南大学硕士学位论文

(a) num ≤ 2(P1、P2 为外边界点) (b) num >2(p1、p4 为外边界点)


图 2-9 直线 y = yb 穿过三角化网格鞋面示意图
Fig.2-9 Schematic diagram of the line y = yb passing through the upper triangulated grid
第五步,如果 boundEdge 遍历未结束,就跳转至第六步,如果结束就跳转回第三
步。
第六步, 查看临时容器中元素个数,如果元素个数 num 大于 2 时,那么说明 y =
yb 这条直线同时穿过了内边界与外边界。根据三角化网格鞋面的几何特性(如图 2-9)
可知,临时容器中 key 的最大值与最小值应属于与外边界边的交点,获取对应的 value
值(对应的边),将其存储于外边界边的容器中;剩余的元素对应的是则内边界边的相
关信息,按同样的方式将其存入内边界边的容器中。
第七步, 遍历结束后清空临时容器,判断 boundPoint 遍历是否结束。如果未遍历
结束就跳转至第二步, 遍历结束则算法流程结束。
根据鞋面排版中二维鞋面的特点,为了得到接近对称的鞋面展开结果,确定鞋面
的分割区域(如图 2-10),在这个区域中选取合适的内外边界点相连得到一条切割路径。
如图 2-10(c),获取如图所示的内外边界点,连接靠近近似对称轴的内外边界点,形成
三维待展鞋面模型的切割线。

(a) 常见鞋面排版形状[51] (b) 切割线选取区域 (c) 切割线位置(黄色线段)


图 2-10 搜索鞋面的切割线
Fig.2-10 The upper cut line is searched in the determinate gesture

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
第二章 经编鞋面网格化曲面的初始展开算法

(a)垂直映射 (b)x = xmid 位置示意


图 2-14 鞋面的垂直映射与直线 x = xmid 位置示意
Fig.2-14 The vertical mapping of the upper and the position of the line x = xmid are shown

(a) x=xmid 与边界边交点(局部举例示意) (b)4 个交点位置示意


图 2-15 直线 x =xmid 与鞋面边界交点示意
Fig.2-15 The intersection point between the line x = mid and the upper boundary is shown
想要确定中心点 P 所在的三角形,可以转化问题为如何判定一个点是否位于三角形
内部。本文给出的方法是,分别求出中心点 P 到达边 AC 的距离 dis1、到达 BC 的距离
dis2、到达 AB 的距离 dis3(如图 2-17(a));再分别求出点 B 到达边 AC 的距离 dis1′、
点 A 到达 BC 的距离 dis2′、点 C 到达 AB 的距离 dis3′(如图 2-17(b))。如果 P 点在
三角形 ABC 的内部,必然会同时满足如下三个表达式即 dis1 <= dis1′、dis2 <= dis2′、
dis3 <= dis3′,那么就将三角形 ABC 作为中心三角形。

19
江南大学硕士学位论文

图 2-16 鞋面中心点 P 位置示意


Fig.2-16 The center point P of the upper

(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)),图
中颜色相同的三角形表示为同一轮需要展开的三角形,不同颜色则表示不同的展开轮
数…以此类推,向边界一轮一轮波浪式地迭代推进。

(a) (b) (c) (d) (e)


图 2-18 鞋面展开迭代示意图
Fig.2-18 Schematic diagram of upper flattening iteration
为了方便后续算法的描述,给出基三角形的概念:已经展开的三角形 T1,与它共
边的三角形中有一个待展三角形 T2,则将 T1 定义为 T2 的基三角形(如图 2-19)。基三
角形一定是已经展开的三角形,它是相对的概念,除了中心三角形,每个三角形都有
可能称为基三角形,也有可能将别的三角形作为基三角形。

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):

(a) x12≠x22 且 y12≠y22 (b) x12 = x22 (b) y12 = y22


图 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 所示。

图 2-21 待求点两个临时平面坐标与 vBase 构成的直线示意


Fig.2-21 Schematic diagram of relationship between temporary plane coordinates and vBase
position
从图 2-21 得知,v3 的正确位置应与顶点 vbase 分布在直线 v1v2 的两侧,分别判断 vbase
与 v3' 、v3''是否为异侧关系:将(x32a,y32a)、(x32b,y32b)代入公式(2-5)得出对应的值 r32a
与 r32b 后,再将 vbase 二维坐标代入公式(2-5)得到 rbase。
𝑟base × 𝑟32a < 0 (2-6)
𝑟base × 𝑟32b < 0 (2-7)
如果公式(2-6)成立,那么 x32=x32a , y32 = y32a;如果公式(2-7)成立,那么 x32 = x32b,y32
= y32b。
情况 2:当 x12 = x22 时,根据欧氏距离求出 y32, x32a ,x32b:
𝑑2 2 − 𝑑1 2 + 𝑦22 2 − 𝑦12 2
𝑦32 = 𝑦32𝑎 = 𝑦32𝑏 =
2 × (𝑦22 − 𝑦12 ) (2-8)

𝑥32𝑎 = √𝑑2 2 + (𝑦32 − 𝑦12 )2 + 𝑥12


(2-9)
2
√ 2
{𝑥32𝑏 = − 𝑑2 + (𝑦32 − 𝑦12 ) + 𝑥12
如果 curTriangle 是中心三角形,根据 x12=x22,将 x32a 与 x32b 分别带入公式(2-10)中
的 x32,取 s1 大于 0 的代入值作为 x32 的解。
𝑠1 = (𝑥32 − 𝑥1 )(𝑥3 − 𝑥1 ) (2-10)
如果 curTriangle 是非中心三角形,由图 2-22 可知,v1v2 在平行于 y 轴,将 x32a 与

23
江南大学硕士学位论文

x32b 分别代入公式(2-11)中的 x32,取 s2 小于 0 的代入值作为 x32 的解。


𝑠2 = (𝑥12 − 𝑥32 )(𝑥12 − 𝑥𝑏𝑎𝑠𝑒 ) (2-11)

图 2-22 临时平面坐标与 vbase 位置关系示意图


Fig.2-22 Schematic diagram of relationship between temporary plane coordinates and vBase
position
情况 3:当 y12 = y22 时,根据欧氏距离求出 x32,y32a,y32b:
𝑑1 2 − 𝑑2 2 + 𝑥22 2 − 𝑥12 2 (2-12)
𝑥32 = 𝑥32𝑎 = 𝑥32𝑏 =
2(𝑥22 − 𝑥12 )

𝑦32𝑎 = √𝑑1 2 + (𝑥12 − 𝑥32 )2 + 𝑦12


(2-13)
2
𝑦32𝑏 = −√𝑑1 + (𝑥12 − 𝑥32 )2 + 𝑦12
{
如果 curTriangle 是中心三角形,根据 y12=y22,将 y32a 与 y32b 分别带入公式(2-29)中
的 y32,取 s3 大于 0 的代入值作为 y32 的解。
𝑠3 = (𝑦32 − 𝑦1 )(𝑦3 − 𝑦1 ) (2-14)
如果 curTriangle 不为中心三角形,根据限制条件可知 v1v2 垂直于 y 轴(如图 2-23),
将 y32a 与 y32b 分别代入公式(2-15)中的 y32,取 s4 小于 0 的代入值作为 y32 的解
𝑠4 = (𝑦12 − 𝑦32 )(𝑦12 − 𝑦base ) (2-15)

图 2-23 临时平面坐标与 vBase 位置关系示意图


Fig.2-23 Schematic diagram of relationship between temporary plane coordinates and vBase position

2.4.2 单个空间三角形的约束展开方法

约束展开方法是对展开结果的优化,避免出现一个点有多个版本的二维坐标的情
况。当一个点同时作为两个或以上三角形的待求点时,就需要对待求点进行约束。如
图 2-24 所示,点 D 是图中两个三角形的公共点,如果出现 D 点同时为两个三角形的待

24
第二章 经编鞋面网格化曲面的初始展开算法

求点,那么点 D 的二维坐标存在两个结果。因此对于点 D 的所有二维坐标需要采用约


束的方法使它的坐标唯一但又尽量降低每个三角形展开的误差。采用约束展开方法可
以初步降低展开结果的误差。

(a) 展开前 (b)展开后


图 2-24 约束点(点 D)示意图
Fig.2-24 Schematic diagram of constraint point (point D)
由于展开算法是由中心三角形依次向外扩散,因此待约束点被约束的次数可以在
本轮待展三角形中进行确认。如图 2-25,红色三角形为已经展开的三角形,白色为待
展开三角形,根据已经展开的三角形,获取下一轮的待展三角形。图 2-25(a)中,T1、
T2、T3 为新一轮的待展三角形,在这一轮中的所有待求点仅属于一个待求三角形中,
可以采用无约束展开的方法;图 2-25(b)中,T1、T2、T3、T4 为新一轮的待展三角形,
这些三角形的待求顶点均为 P,因此顶点 P 会得到多个版本的二维坐标,此时选择约束
展开方法,将顶点 P 的所有版本二维坐标求出,取平均值作为点 P 的二维坐标。可以得
知,当待求三角形数量大于待求点数量时,必然存在待约束点,获取每一轮三角形后,
可以先查看待求点的数量可以初步判断每一轮是否需要采取约束展开方法。

(a) 无约束待求点 (b)待约束待求点


图 2-25 待求点(点 P)约束次数
Fig.2-25 The constraint times of point (P) to be found
构成三角形的约束条件为两边之和大于第三边或两边之差小于第三边。但由于曲
面在初始化展开过程中待约束点的普遍存在,在更新它们的过程中由于误差的不断累
加,会出现待约束点可能作为某三角形展开的已知点时无法与该三角形的另一已知点
构成三角形的情况(如图 2-26)即 d1 + d2 < d 或 d1 - d2 > d 的情况。本文采用常见的方
式处理这一情况:如果 d1 ≥ d2 则直接将 d2 的值赋给 d;如果 d1 < d2 则将 d1 的值赋给
d。赋值并不是真正改变 P1 与 P2 在平面上位置或者是它的实际边长,而是在不构成三
角形的情况下,暂时给 d 安排一个合理的值从而使它构成三角形以便于计算。这样求出
的平面点坐标,一定能和 P1 与 P2 构成平面上的三角形。

25
江南大学硕士学位论文

(a) d1 + d2 < d (b) |d1 - d2| > d


图 2-26 无法构成三角形的两种情况
Fig.2-26 Two cases where it can't form a triangle

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 的展开结果。

图 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)。该模型将网格
上所有的顶点作为质点,所有的边作为弹簧。质点的质量由它所属的三角形面积来决
定,弹簧是拉伸或压缩的状态则是由鞋面初始化展开结果中边的实际长度与三维鞋面
的空间边原始长度进行比较,如果前者比后者长则弹簧处于拉伸状态,前者比后者短
弹簧就属于压缩的状态,前者等于后者时弹簧则处于不受力的状态。建立该模型的意
义就是将处于拉伸或压缩的弹簧沿着受力方向相反的方向进行弹簧能量的释放,通过
不断迭代地释放弹簧的能量最终得到一个趋于平衡状态的质点-弹簧模型,此时就认为
鞋面的初始化展开结果得到了理想的优化结果。

(a) 平衡状态 (b) 受力状态


图 3-1 质点-弹簧模型示意
Fig.3-1 Schematic of the particle - spring model

弹簧在初始化展开过程中产生的应变能表示为
𝑁
1
𝑊 = ∑ 𝐾 (𝑑 − 𝑑′)2 (3-1)
2
𝑖=1
在初始展开中某点的受力情况可以表示
𝑁

𝐹 = ∑ 𝐾(𝑑 − 𝑑′)𝐴𝑣𝑝 𝑣𝑞 (3-2)


𝑖=1
式中, K —— 弹性变形系数

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
江南大学硕士学位论文

step1 设置待优化鞋面初始的单位时间增量 Δt,接着用公式(3-5)计算初始展开结果


中的所有质点的质量。当前采用质点-弹簧模型对初始展开鞋面的应变能释放的迭代次
数 num 置为 1。
step2 能量释放的过程主要分为以下三步:
第一步:采用公式(3-2)计算初始展开结果中所有质点的受力情况。
第二步:采用公式(3-6)计算初始展开结果中所有质点的加速度。
第三步:采用公式(3-7)与(3-8)来计算当前迭代结束后鞋面上所有质点的速度与位
置。
step3 如果迭代次数 num 为 1,那么就将初始化展开中的全局长度误差赋值给公式
(3-11)中的 Dlast 与 Dcur;否则,就将当前优化迭代次数所对应的三角化网格鞋面的全局
长度误差赋值给 Dcur。
step4 查看是否满足 Dcur 的值小于 Dlast。如果成立就使用公式(3-11)重新给单位时间
增量 Δt 赋值;否则就将 step1 中给定的初始单位时间增量值重新赋值给当前的 Δt。
step5 优化迭代次数 num 加 1。
step6 当达到预先设置的优化迭代次数,本算法流程终止,得到的三角化网格鞋面
即为最终的展开结果;否则将公式(3-11)中的 Dlast 与 Dcur 值置为相等,并跳转回第二步。
以上展开算法在 Visual Studio 集成开发环境中使用 C++进行开发,可视化界面使用
了 MFC 单文档窗口实现(如图 3-2),图形接口使用 OpenGL(如图 3-3)。OpenGL 是
广泛应用于计算机图形学中的图形 API,是独立于视窗操作系统的,可以跨语言、跨平
台且能够非常方便的将各种类型的 3D 文件转化为顶点数组用于各种算法的计算与实现,
本文的鞋面初始展开与优化算法就是基于 OpenGL 的图形接口来实现的。算法的最终实
现效果如图 3-4 所示。关于初始展开与优化后的局部细节对比如表 3-1。

图 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

由表 3-1 可知,给出了鞋面 4 个部位的局部初始化展开细节与基于能量模型优化的


展开细节,可以证明,经过优化后的鞋面网格分布更加均匀,三角化网格鞋面在初始
化展开结果中累计的能量得到释放,鞋面的质点-弹簧应变能模型趋于平衡。

(a) 三维鞋头示意 (b) 二维鞋头示意(初始展开) (c) 二维鞋头示意(优化后)


图 3-5 鞋头部位示意
Fig.3-5 shows the position of the shoe head
为了进一步分析优化算法对鞋面展开结果的影响,选取整个鞋面中起伏较大的鞋
头部分如图 3-5 与整个鞋面,分别计算如表 3-2 中的面积值,并进行误差对比。由表 3-
2 中可知,初始展开的二维鞋头与三维鞋头的面积误差为 2.21/cm2,经过优化的二维鞋
头与三维鞋头面积误差为 1.76/cm2;初始展开的鞋面整体面积与三维鞋面整体面积误差
为 30.58/cm2,经过优化的鞋面整体面积与三维鞋面整体面积误差为 28.91/cm2。可以得
知,经过优化后的二维鞋面不管从局部还是整体其尺寸都更加贴近三维原始鞋面模型,

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𝑑 )2 (3-12)


𝑖=1

式中,𝑆𝑑 ——三维与二维鞋面之间的相似值
𝑆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

(a) 提花面料意匠图 (b)提花网眼面料意匠图


图 3-8 提花面料意匠图
Fig.3-8 Jacquard fabric design

(a) 提花面料 (b) 提花网眼面料


图 3-9 提花面料仿真图
Fig.3-9 jacquard fabric simulation diagram
最后,将二维的贾卡提花仿真图纹理映射至三维模型。OpenGL 纹理映射功能支持
将一些像素数据经过变换将其附着到鞋面网格中的每个三角形上。只要指定每一个顶
点在纹理图像中所对应的像素位置,OpenGL 就会自动计算顶点以外其他的点在纹理图

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 坐标的最小值与最大值。

(a) 提花面料鞋面 (b) 提花网眼面料鞋面


图 3-11 三维经编提花鞋面 1 映射仿真图
Fig.3-11 3D warp knitting jacquard upper 1 mapping simulation diagram

(a) 鞋头映射仿真示意 (b) 鞋跟映射仿真示意


图 3-12 三维经编提花鞋面 1 其他部位局部映射仿真图
Figure 3-12 3D warp knitted jacquard upper 1 Local mapping simulation of other parts
根据图 3-11 与图 3-12 可以证明,使用本算法展开的鞋面,三维的鞋面主体、鞋头

38
第三章 鞋面初始展开结果的优化与织物设计

与鞋跟的花型位置基本贴合二维鞋面设计的花型,且形变较小、花型位置正确,验证
了展开算法是有效的。
除了鞋面 1 以外,对无鞋舌的鞋面 2(如图 3-13)进行展开,接着进行提花意匠图
的设计并仿真(如图 3-14),通过纹理映射技术得到了如图 3-15 的效果图,花型位置基
本正确且花型形变较小。

图 3-13 三维鞋面模型 2
Fig.3-13 3D upper model 2

(a) 展开结果 (b) 花型意匠图 (c)花型仿真图


图 3-14 三维鞋面模型 2 的展开与仿真
Fig.3-14 Development and simulation of 3D upper model 2

(a) 鞋面 2 仿真效果 (b) 局部细节


图 3-15 三维经编提花鞋面 2 映射仿真图
Fig.3-15 Mapping simulation diagram of 3D warp knitting jacquard upper 2
由图 3-14 与图 3-15 可知,使用展开算法后的鞋面设计的贾卡花型再纹理映射至三
维鞋面,花型位置仍然正确且变形较小,因此可以得知使用本课题的鞋面展开算法可
以得到变形较小的二维鞋面,对鞋面设计具有一定的实际意义。

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°的旋转,以保证生产与原始效应相似的织物外观。其他角度的旋
转会产生期望外的外观,通常不采用。

(a)原图 (b)旋转 180° (c)旋转 90°


图 4-1 经编织物图案旋转对比图
Fig.4-1 Comparison of warp-knitted jacquard pattern rotation

(a)原垫纱图 (b)旋转 180°垫纱图 (c)旋转 90°垫纱图


图 4-2 经编织物垫纱旋转对比图
Fig.4-2 Comparison of warp-knitted jacquard shoe upper rotation
基于以上分析,经编提花鞋面不具备各向同性的特征,因此排版时不能像其他材
料那样为了提高利用率而进行任意角度的旋转,还应考虑各图案排列后效应是否与原
图一致。结合编织工艺和后整理工序的要求,生产中常用的排版方法可以分为 3 种:规
则正排(图 4-3(a)),交替正排(图 4-3(b)),交替对排(图 4-3(c))。如图 4-3 所示,规则
正排的第一排为左脚鞋面,第二排为右脚鞋面,即每两排一个循环;交替正排与交替
对排的第一、二排为左脚鞋面,第三、四排为右脚鞋面,即每四排一个循环。为了方
便描述,本章将排列同只脚的鞋面定义为一行。
经编鞋面在编织时既已确定好鞋码大小,因此织物尺寸的稳定性非常重要。而经

41
江南大学硕士学位论文

编织物编织时会产生弓形斜,后整理时的张力也会引起线圈的倾斜。因而各工序需检
查织物的倾斜情况并及时调整,以获得高品质且数据准确的理想织物。同时,生产时
为了随时进行查验,通常会在排列一定数量的鞋面之后插入一个不同组织的分隔区作
为参考线,如图 4-4。

(a) 规则正排 (b) 交替正排 (c) 交替对排


图 4-3 鞋面排版方式示意图
Fig.4-3 Typesetting of shoe uppers

图 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 号色的部
分为鞋面区域,可以对不同的色号定义动作,使其代表不同的组织结构。

(a) 边界特征定义 (b) 边界特征取值


图 4-5 边界点的边界特征定义示意图
Fig.4-5 Boundary feature definition of boundary points
绘制后的一只鞋为一个连通区域,使用扫描线填充算法可以提取出鞋面图案,同
时获得鞋面的边界点。为了方便后续算法的实现,将边界点按行优先排列存储,同时
保存每个边界点的边界特征[55]。记录边界点的特征时,将被记录的边界点作为参考点,
用一个字节记录参考点周围 8 个意匠格是否为 0 号色,字节中每一位代表的值如图 4-
5(a)。图 4-5(b)意匠图中左下角两个边界点的特征值分别为 0XE9 和 0XF0。多数鞋的左
右脚是对称的,因此只需要提取一只鞋的区域和边界即可[56]。

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)重叠即可,不需计算距离。
为了减少工作量提高效率,在对鞋面的边界进行膨胀时,对其边界的第一点进行
膨胀后,在后续的操作中仅需对与前一边界点操作中的不重复部分进行填充即可。

(a) Wdis=4,Hdis=4 (b) Wdis=2,Hdis=1


图 4-8 某边界点不同间隔针数与不同间隔横列数膨胀结构图
Fig.4-8 The expansion structure diagram of the number of needles and the number of rows at
different intervals at a boundary

(a)单只鞋面膨胀前 (b)单只鞋面膨胀后与膨胀局部细节 (c)膨胀后鞋面排版示意


图 4-9 膨胀前后示意图(以规则正排为例)
Fig.4-9 Schematic diagram before and after expansion
交替正排和交替对排算法基本一致,区别在于交替对排中第二排和第四排的鞋面
需要旋转 180°。
交替正排和交替对排均需要分为排列数量为奇数双鞋和偶数双鞋两种情况。当排
列鞋面的数量为奇数双鞋时:第一排相邻两只鞋之间横向允许的最大间隔距离为
𝑁 +1
𝑊𝑓𝑎𝑏𝑟𝑖𝑐 − 𝑠 2 × 𝑊𝑠ℎ𝑜𝑒
𝑋𝑑𝑖𝑠 = (4-3)
𝑁𝑠 + 1
2 −1
式中:Ns— 排列的双数,取奇数且 Ns∈[Nx,2Nx]
此种情况下,第一排相邻鞋子按最大距离 Xdis 排放,则第二排横向可移动范围 E =
Wshoe+Xdis。由此可得第二排鞋面的放置流程为:首先放置在第一行第一列的意匠格,
如有碰撞则继续检查第一行第二列,如不发生碰撞则为可放置的位置,具体流程与图
4-6 类似,但放置位置除了在纵向上移动,还需范围 E 内横向移动搜索,直到找到不发
生碰撞的位置为止(如图 4-10),此时高度 H 为排下两排鞋面所占用的最小高度。

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 种放置情况:
𝑋𝑑𝑖𝑠

𝑇= ∑ 𝐸𝑖 2 × (𝐻𝑠ℎ𝑜𝑒 + 𝐻𝑑𝑖𝑠 + 1) (4-5)


𝑖=𝑊𝑑𝑖𝑠
式中:Hshoe 表示为一个鞋面高度,以意匠格为单位。

图 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-12(a)不满足排版要求则图 4-11(b)同样不满足。这


种情况增加了碰撞检测的次数,若所有相对位置相同的情况都只需执行一次检测,省
掉重复操作会大大提升鞋面排版的效率。图 4-12(c)所示的方法可以解决这一问题,将
布幅宽度增加 E,第一排的鞋面固定在布面中间,第二排鞋的移动范围变为 2E,可以
得到最多有
𝑋𝑑𝑖𝑠

𝑇= ∑ 2𝐸𝑖 × (𝐻𝑠ℎ𝑜𝑒 + 𝐻𝑑𝑖𝑠 + 1) (4-6)


𝑖=𝑊𝑑𝑖𝑠
种情况,明显少于公式(5)得到的情况。计算完成后根据第一、二排鞋面的位置从布幅
两侧减掉宽度 E。

(a) 相对位置 1 (b) 相对位置 2 (c) 解决方法示意图


图 4-12 相对位置示意图
Fig.4-12 Schematic diagram of relative position
在第一排和第二排的左脚鞋面排列好后,水平翻转即得到第三排和第四排的右脚
鞋面。将第一、二排和第二、四排分别作为整体,以与上述类似的方法执行碰撞检测,
可得到两行鞋面的放置位置。如果在一个循环中有更多行鞋面,则可以按同样的方法
处理。
因为同一排中的鞋面之间的距离总是相等的,所以当一排的鞋多于 2 只时,可以省
略掉中间的,只取最左和最右的鞋面进行计算,可减少运算量。计算过程中,意匠图
某一行上多个意匠格位置都能够放置第二排的鞋面时,应使第二排鞋面与第一排左右
尽可能等间距,从而使鞋面在布面上排列整体更均匀,有利于送经量的调节,提高布
面质量。

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
第四章 经编提花鞋面自动排版算法的研究与实现

posY <- y+borderPt[p].y


if(bgColor[posX乘高度+posY] != 0)
退出线程
end for
placeFlag[y*E + x] <- 1
atomicMin(&selY, y);
end function
用detectKernel <<< 2*E, Hshoe+Hdis>>>(…)调用核函数,block数量取为4.3.2节中
2E的大小,每个block中的线程thread数量为Hshoe+Hdis。为使线程能够连续读取global
memory中的数据,bgColor以列优先方式存储。因为并行线程同步执行,不能确定哪一
个先执行完成,当在意匠图的某一行上取得了可放置位置,应设置一个状态标志,以
便高于该行的线程能快速退出工作。CUDA的atomicMin可在一次原子事务中读取存储
器地址中的值,与输入值比较,将较小的值存入存储器地址。本文使用这一原子操作
将状态标志设置为较低的意匠行。经编提花鞋面意匠高度通常在1200以内,宽度在500
以内,所以边界点数据borderPt大小不超过64KB,能够存储在GPU中的constant memory
中,有利于提高读取速度。

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

表 4-2 常规鞋面 A 排版示意图


Tab.4-2 Shoe upper A layout diagram
A-a A-b A-c A-d A-e A-f A-g A-h A-i

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
第四章 经编提花鞋面自动排版算法的研究与实现

表 4-4 常规鞋面 A 利用率


Tab.4-4 Shoe upper A utilization rate
鞋面排版方式 鞋面编号 高度/格 利用率/(双/腊克)
规则正排 A-a 481 2.00
A-b 802 1.50
A-c 937 1.54
交替正排
A-d 954 1.76
A-e 953 2.01
A-f 620 1.94
A-g 767 1.88
交替对排
A-h 842 2.00
A-i 921 2.08

表 4-5 倾斜鞋面 B 利用率


Tab.4-5 Shoe upper B utilization rate
鞋面排版方式 鞋面编号 高度/格 利用率(双/腊克)
规则正排 B-a 885 1.08
B-b 1236 0.97
B-c 1481 0.97
交替正排
B-d 1673 1.00
B-e 1643 1.17
B-f 900 1.33
B-g 1227 1.17
交替对排
B-h 1502 1.12
B-i 1611 1.19
表 4-4 与表 4-5 列出了各排版方式的利用率,观察数据可以得出,利用率最高的分
别为 A-i 和 B-f。若以最容易手工排版的规则正排为参考标准,A-i 的利用率提高了 4%,
B-f 的利用率提高了 23%。表中 A-b、A-c、A-d、A-f、A-g、B-b、B-c、B-d 的利用率比
规则正排低,由此可见交替正排和交替对排不总是优于规则正排。
表 4-6 为本文算法的三个应用实例,展示了不同形状鞋面的排版结果。
表 4-6 不同形状鞋面排版比较实例
Tab.4-6 A comparative example of shoe upper layout in different shapes
单只鞋 规则正排利用率 最佳排版方式利用率
实例 规则正排 最佳排版方式
面 /(双/腊克) /(双/腊克)

1 3.14 3.42

2 2.64 2.81

3 1.32 1.65

实例 1 交替对排的利用率比规则正排提高了 8.9%,实例 2 交替正排的利用率比规


则正排提高了 6.4%,实例 3 交替对排的利用率比规则正排提高了 25%。实验结果表明,
通常情况下规则正排并不是最优的排列方法,根据鞋面的形状交替正排与交替对排或

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
参考文献

参考文献

[1] 陈梦佳, 蒋高明, 张燕婷. 经编双贾卡提花间隔鞋面材料的设计开发[J]. 针织工业, 2021(03): 25-28.


[2] 丛洪莲, 钟君. 经编三维结构贾卡鞋面材料的尺寸预测系统[J]. 纺织学报, 2017, 38(03): 61-66.
[3] 高雅, 蒋高明, 张燕婷, 张爱军. 经编双针床纱架贾卡提花鞋材工艺研究[J]. 针织工业, 2020(05): 19-
22.
[4] Meek DS, Walton DJ. On surface normal and Gaussian curvature approximations given data sampled
from a smooth surface[J]. Computer Aided Geometric Design, 2000, 17(6): 521-543.
[5] 张磊, 彭皓云. 壁板外形曲面展开及其在展开建模中的应用[J]. 飞机设计, 2010, 30(03): 35-38.
[6] Richard J L. Detection of zones of abnormal strains in structures using Gaussian curvature analysis[J].
AAPG Bulletin, 1994, 78(12): 1811-1819.
[7] Lai Y K, Hu S M, Martin R R , et al. Fast mesh segmentation using random walks[C].Acm Symposium
on Solid & Physical Modeling, ACM, 2008.
[8] Wang CL, Tang K. Achieving Developability of a Polygonal Surface by Minimum Deformation: a Study
of Global and Local Optimization Approaches[J]. The Visual Computer, 2004, 20(11): 521-539.
[9] 王军. 钣金展开 CAD 图形代码处理技术[D]. 西安: 西安电子科技大学, 2010.
[10] Chen H, Bishop J. Delaunay Triangulation for Curved Surfaces[J]. International Meshing Roundtable
Proceedings, 1997:115-127.
[11] Manning JR. Computerized pattern cutting: Methods based on an isometric tree[J]. Computer-Aided
Design, 1980, 12(1): 43-47.
[12] Wang XC, Cao J, Liu XP. Feature detection of triangular meshes via neighbor supporting[J]. Journal of
Zhejiang University SCIENCE C, 2012, 13(6): 440-451.
[13] Li JT, Zhang DL, Lu GD, et al. Flattening triangulated surfaces using a mass-spring model[J]. The
International Journal of Advanced Manufacturing, 2005, 25(1-2): 108-117.
[14] 彭群生, 胡国飞. 三角网格的参数化[J]. 计算机辅助设计与图形学学报, 2004(06): 731-739.
[15] Lo SH. Automatie mesh Generation over Iniersecting Surfaces[J]. International Journal for Numerical
Methods in Engineering, 1995, 38: 943-954.
[16] Coelho LCG, Gattass M, Figueiredo LH. Intersecting and trimming parametric meshes on finite element
shells[J]. International Journal for Numerical Methods in Engineering, 2000, 47(4): 777-800.
[17] Bruyns C D, Senger S. Interactive cutting of 3D surface meshes[J]. Computers & Graphics 2001, 25(4):
635-642.
[18] Bielser D, Maiwald V A, Gross M H. Interactive Cuts through 3-Dimensional Soft Tissue[J]. Computer
Graphics Forum 1999, 18(3): 31-38.
[19] Nienhuys H W, Stappen A F. A Delaunay approach to interactive cutting in triangulated surfaces[C]. In:
Boissonnat J D, Burdick J, Goldberg K, Hutchinson S, eds. Algorithmic Foundations of Robotics V
(Springer Tracts in Advanced Robotics). Berlin: Springer, Berlin, Heidelberg, 2004:113–129.
[20] Sheffer A, Sturler E. Parameterization of Faceted Surfaces for Meshing using Angle-Based Flattening[J].
Engineering with Computers, 2001, 17(3): 326-337.
[21] Munkers J. Topology[M]. Prentice-Hall, Englewood Cliffs, NJ, USA, 2000,1.
[22] Wang CCL, Wang Y, Tang K, et al. Reduce the stretch in surface flattening by finding cutting paths to
the surface boundary[J]. Computer-Aided Design 2004, 36(8): 665-667.
[23] Hinds B K, McCartney J, Woods G. Pattern development for 3D surfaces[J]. Computer-Aided Design,
1991, 23(8): 583-592.
[24] 马明旭, 毛昕, 王哲英. 提高曲面近似展开精度的方法与实现[J]. 工程图学学报, 2002(02): 127-132.
[25] 毛昕, 马明旭, 王哲英. 曲面片的可展性能及其应用[J]. 工程图学学报, 2002(02): 133-138.

56
参考文献

[26] 毛昕, 毛普元, 孙静. 自由曲面最佳展开基点的几何属性[J]. 工程图学学报, 2008(02): 98-103.


[27] 王红艳. 三角网格曲面优化展开技术研究[D]. 哈尔滨: 哈尔滨工业大学, 2013.
[28] 陈功, 周来水, 安鲁陵, 詹雯.一种通用的复杂曲面展开方法研究[J]. 中国机械工程, 2007(24): 2914-
2920.
[29] 詹雯. 复杂曲面展开技术研究[D]. 南京: 南京航空航天大学, 2007.
[30] 刘桥生. 钣金数字化展开与优化排样及其工艺约束处理技术研究[D]. 上海: 上海交通大学, 2015.
[31] 陈动人, 王国谨. 基于伪直母线的复杂曲面自适应分片与展开[J]. 软件学报, 2003, 14(3): 660-665.
[32] Sheffer A, Sturler E. Parameterization of faceted surfaces for meshing using angle-based flattening[J].
Engineering with Computers, 2001, 17(3): 326-337.
[33] Hormann K, Levy B, Sheffer A. Mesh parameterization: Theory and practice[C]. San Diego: ACM
SIGGRAPH Course Notes, 2007.
[34] Olga S, Daniel CO, Rony G, et al. Bounded-distortion piecewise mesh parameterization[C].
Proceedings of the conference on Visualization. IEEE Computer Society, 2002: 355-362.
[35] Charlie C L W. Towards flattenable mesh surfaces[J]. Computer-Aided Design, 2008, 40(1): 109-122.
[36] Wonjoon Cho, Nicholas M Patrikalakis. Approximate development of trimmed patches for surface
tessellation[J]. Computer-Aided Design, 1998, 30(14): 1077-1087.
[37] 李基拓. 三角化曲面展开技术研究及其应用[D]. 杭州: 浙江大学, 2005: 20-23.
[38] McCartney J, Hinds B K, Seow B L. The flattening of trianglulated surfaces incorporating darts and
gussets[J]. Computer-Aided Design, 1999, 31(4): 249-260.
[39] Wang C, Smith S, Yuen M. Surface flattening based on energy model[J]. Computer-Aided Design, 2002,
34(11): 823-833.
[40] Azariadis PN, Aspragathos NA. Geodesic curvature preservation in surface flattening through
constrained global optimization[J]. Computer-Aided Design, 2001, 33(8): 581-591.
[41] Zhang QL, Luo XQ. Finite element method for developing arbitrary surfaces to flattened forms[J]. Finite
elements in analysis and design, 2003, 39(10): 977-984.
[42] 胡津铭. 三角形网格曲面模型数控加工刀位点计算方法研究[D]. 长沙: 湖南大学,2011.
[43] 梁堰波, 徐伟辰, 李吉刚, 杨钦. 基于力学模型的曲面展开通用算法[J]. 计算机工程与设计, 2012,
33(09): 3539-3543.
[44] 韩林, 刘斌. 基于弹簧-质点模型的三角网格曲面展开算法及其应用[J]. 华侨大学学报(自然科学
版), 2011, 32(06): 601-606.
[45] 王俊彪, 张贤杰. 基于单元等变形的复杂曲面展开算法研究[J]. 机械科学与技术, 2004, 23(4): 447-
449.
[46] 梁建军, 冯毅力, 李汝勤. 服装 CAD 技术研究的现状与方向[J]. 纺织学报, 2003(06): 104-106.
[47] 卓开霞. 皮革服装 CAD 矩形件样板的优化排样探究[J]. 皮革科学与工程, 2019, 29(03): 74-79.
[48] 汪朋朋, 施群, 谢云斌, 谢家骏, 潘炳伟. 基于最小重力势能原理与遗传算法的服装排料算法[J]. 现
代纺织技术, 2018, 26(03): 53-61.
[49] 肖友清, 高成英, 王栋.碰撞检测在服装 CAD 排版系统中的实现[J]. 现代计算机(专业版), 2001(09):
93-96.
[50] Charlie C L W, Kai T. Developability-preserved free-form deformation of assembled patches[C].
Proceedings of the ninth ACM symposium on Solid modeling and applications. Eurographics
Association, 2004: 231-236.
[51] 钟君. 经编贾卡提花鞋面织物的设计与仿真[D]. 无锡: 江南大学, 2017.
[52] 毛国栋, 孙炳楠, 徐浩祥. 基于弹簧-质点系统的薄膜结构曲面展开算法[J]. 浙江大学学报(工学版),
2005(08): 1238-1242.
[53] 陈功, 周来水, 安鲁陵, 等. 基于弹簧-质点模型曲面展开的改进算法[J]. 计算机辅助设计与图形学

57
参考文献

学报, 2007(08): 1009-1014+1021.


[54] 万志琴. 服装批量定制中面料利用率与省布率的关系[J]. 纺织学报, 2005, 26(4): 124-125.
[55] 邓仕超, 黄寅. 二值图像膨胀腐蚀的快速算法[J]. 计算机工程与应用, 2017, 53(5): 207-211.
[56] 曾 浩 洋,张 红 英.天 空 区 域 分 割 的 图 像 去 雾 及 CUDA 并 行 实 现[J].小 型 微 型 计 算 机 系
统,2019,40(03):655-659.
[57] 李建江, 张磊, 李兴钢,等. CUDA 架构下的灰度图像匹配并行算法[J]. 电子科技大学学报, 2012,
41(01): 110-113.
[58] Li D, Huang S H, Huang XY, et al. An improved fuzzy connected image segmentation method base on
CUDA[J]. Journal of Computer-Aided Design &Computer Graphics, 2016, 28(2): 295-300.
[59] Xue Y, Ren J, Su H, et al. Parallel implementation and optimization of haze removal using dark channel
prior based on CUDA[J]. Communications in Computer & Information Science, 2013, 207(1): 99-109.

58
附录

附录一: 作者在攻读硕士学位期间发表的论文

1.吴妙缘,张爱军,张燕婷.经编提花鞋材的自动排版及 CUDA 的并行实现[J].丝


绸,2021,58(12):126-132.
2. 吴妙缘,张爱军. 经编提花鞋面的展开算法及应用[J].轻纺工业与技术.(已录用).

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
附录

int tmp = edBoundary[j];


edBoundary[j] = edBoundary[j + 1];
edBoundary[j + 1] = tmp;
}
}
}
double Y1 = pDoc->upper.u_vertices[pDoc->upper.u_edges[edBoundary[2]].
Vedge[0]].Vbefore[1];
double Y2 = pDoc->upper.u_vertices[pDoc->upper.u_edges[edBoundary[3]].
Vedge[0]].Vbefore[1];
Ymid = Y1 + (Y2 - Y1)/2;
double*cv = new double[2];
cv[0] = Xmid;
cv[1] = Ymid;
return cv;
}
int CShoe3DView::CenterTriangleIndex(){
CShoe3DDoc* pDoc = GetDocument();
double*cvertex;
cvertex = findCenterVertex();
double xC = cvertex[0];
double yC = cvertex[1];
for(int i = 0;i < allTri.size();i ++){
double x1 = pDoc->upper.u_vertices[pDoc->upper.u_triangles_[i].vertexID[0]].
Vbefore[0];
double x2 = pDoc->upper.u_vertices[pDoc->upper.u_triangles_[i].vertexID[1]].
Vbefore[0];
double x3 = pDoc->upper.u_vertices[pDoc->upper.u_triangles_[i].vertexID[2]].
Vbefore[0];
double x[] = {x1,x2,x3};
for(int j = 0;j < 2;j ++){
int minIndex = j;
for(int m = j + 1;m < 3;m ++){
minIndex = x[m] < x[minIndex]? m:minIndex;
}
double tmp = x[j];
x[j] = x[minIndex];
x[minIndex] = tmp;
}
if(((x[0] < xC) &&(x[2] > xC)) || (xC == x[0] || xC == x[1] || xC == x[2]))
{
double y1 = pDoc->upper.u_vertices[pDoc->upper.u_triangles_[i].vertexID[0]].

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"

unsigned char * oriImageWithEdgeGPU;


unsigned char * paperGPU;
short2 * curRowEdgePtsGPU;
char * posesGPU;
unsigned int * selJGPU;

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;
}

__global__ void doKernel(int startYScan, int endYScan, int curRowEdgePtsSize,


short edgeXOffset,int paperHeight,int moveRange
,const unsigned char * paperGPU, const short2 * curRowEdgePtsGPU,char *posesGPU,
unsigned int *selJGPU)
{
unsigned int j = threadIdx.x;
if (j > selJGPU[0])
return;
unsigned int mk = blockIdx.x;
unsigned int mj = startYScan + j;
for (int p = 0; p < curRowEdgePtsSize; p++)
{
unsigned int k1 = mk + constEdgePts[p].x;
unsigned int j1 = mj + constEdgePts[p].y;
if (j1 > endYScan)
{
break;
}
unsigned char val = paperGPU[k1*paperHeight + j1];
if (val != 0)
{
return;
}
}

for (int p = 0; p < curRowEdgePtsSize; p++)


{
unsigned int k1 = mk + constEdgePts[p].x + edgeXOffset;
unsigned int j1 = mj + constEdgePts[p].y;
if (j1 > endYScan)
{
break;
}
unsigned char val = paperGPU[k1*paperHeight + j1];

65
附录

if (val != 0)
{
return;
}
}
posesGPU[j*(moveRange + 1) + mk] = 1;
atomicMin(&selJGPU[0], j);
}

__global__ void get_KandJ_Kernel(int moveRange,int centerK,const char * posesGPU,


unsigned int *selJGPU)
{
int delta = 0xffff;
for (int mk = 0; mk <= moveRange; mk++)
{
if (posesGPU[selJGPU[0]*(moveRange + 1) + mk]==1)
{
if (abs(mk + centerK) < delta)
{
selJGPU[1] = mk;
delta = abs(mk + centerK);
}
}
}
}

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

You might also like