CN111932647A - 基于java的椭圆图章文字均等分配的算法 - Google Patents
基于java的椭圆图章文字均等分配的算法 Download PDFInfo
- Publication number
- CN111932647A CN111932647A CN202010688751.2A CN202010688751A CN111932647A CN 111932647 A CN111932647 A CN 111932647A CN 202010688751 A CN202010688751 A CN 202010688751A CN 111932647 A CN111932647 A CN 111932647A
- Authority
- CN
- China
- Prior art keywords
- arc length
- ellipse
- characters
- character
- seal
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000009826 distribution Methods 0.000 title description 6
- 238000009827 uniform distribution Methods 0.000 claims abstract description 5
- 238000000034 method Methods 0.000 abstract description 6
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 238000003860 storage Methods 0.000 description 2
- PXFBZOLANLWPMH-UHFFFAOYSA-N 16-Epiaffinine Natural products C1C(C2=CC=CC=C2N2)=C2C(=O)CC2C(=CC)CN(C)C1C2CO PXFBZOLANLWPMH-UHFFFAOYSA-N 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 239000010977 jade Substances 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/001—Texturing; Colouring; Generation of texture or colour
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/30—Authentication, i.e. establishing the identity or authorisation of security principals
- G06F21/44—Program or device authentication
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Image Generation (AREA)
Abstract
本发明公开了一种基于JAVA的椭圆图章文字均等分配的算法,根据输入的椭圆长度参数和椭圆宽度参数,在指定的画布上以画布的中心点为圆心并运用Ellipse2D函数绘制出椭圆图形,根据图章文字参数所占用的弧长,计算图章文字在椭圆图形内绘制的起始度数和结束度数;通过计算三角函数值,得到距离椭圆图形的圆心位置,通过JAVA绘画函数Graphics2D绘制文字。在相对较低的复杂度的情况下,具有较高的效率,非常符合传统雕刻椭圆形图章的美观要求,可保证同等角度不同弧长下,文字占有空间均等分配,适用于椭圆、圆形图章,适宜推广应用。
Description
技术领域
本发明涉及电子图章制造技术,特别涉及一种基于JAVA的电子椭圆图章文字的均等分配算法。
背景技术
图章技术在中国早已历史悠久,大多以玉石为载体,随机近代电子科技的发展,电子图章作为签名的载体显得越为重要。相比传统图章,电子图章更为安全,数字认证技术确保用章人身份可识别,杜绝偷用、盗用、越权使用;电子图章以网络为媒介,在线形式简化图章申请使用流程,便捷快速,提高了工作效率;电子图章更为可靠,使用计算机对图章数据存储、处理,实现对图章过程的全程监管,保证在签印过程中不可抵赖。
当前,大部分的电子图章以圆形、椭圆为主,由于圆的长宽相等的特殊性,圆形图章只要旋转角度相等,就可保证图章的文字均等分配在圆弧上,而由于椭圆的特殊性,这种旋转角度均等分配会导致接近中间的字距宽而两边的字距短,达不到传统图章的效果。
当前,大部分的电子图章只是按照文字距离进行排版,不符合椭圆形电子图章的样式要求。
发明内容
为解决椭圆图章中文字均等分配的要求,本发明提供一种基于JAVA的椭圆图章文字均等分配的算法,为解决在椭圆长宽不等的图章中,达到圆弧上所有文字可以相等字距排版,实现按弧长均等分配绕椭圆圆弧排列的文字,提高椭圆图章的制作质量,以达到传统刻章的效果。
本发明采用以下技术方案实现上述目的。基于JAVA的椭圆图章文字均等分配的算法,其步骤如下:
1)将图章画布设置为透明颜色,图章设置为白色;根据输入的椭圆长宽参数和椭圆宽度参数,在指定的画布上以画布的中心点为圆心并运用Ellipse2D函数绘制出椭圆图形,根据图章文字参数所占用的弧长,计算图章文字在椭圆图形内绘制的起始度数和结束度数;
2)设置开始绘制文字的度数A0,通过计算三角函数值,得到距离椭圆图形的圆心位置,将角度A0旋转0.5°得到A1,再得到旋转后的距离圆心位置的值,通过函数计算得到旋转0.5°的弧长Z0:
(X1-X0)2+(Y1-Y0)2 = Z2
式中:X0 和Y0为椭圆图形圆心在画布的坐标初始点,X1和Y1为A1与椭圆的相交点距离圆心位置值,Z0为弧长;
3)根据角度A0和A1(A0+0.5°),三角函数cosA0、sinA0得到X0、Y0,同理得到X1、Y1;通过勾股定理Z2=(X1-X0)2+(Y1-Y0)2,计算三角形斜边长,即弧长Z0;
4)将每次旋转0.5°,直到角度超过结束绘制文字的角度,将每次旋转的弧长Z0,Z1......Zn的值相加得到总的弧长Z,得到旋转角度与弧长Z之间的关系;
5)根据所有文字占用的弧长和文字字数,得到每个文字占用的平均弧长;
6)根据每个文字占用的弧长和文字排序,得到每个文字中心点到弧长开始计算位置的长度,所对应的弧长Zn;
7)通过比较弧长Zn与旋转角度的关系,得到每个文字的旋转角度ang;
8)通过旋转角度ang,与椭圆参数X、Y的关系,得到文字距离圆心O的偏移距离x、y;
9)在得知每个文字的旋转角度ang和画布偏移距离x、y后,通过JAVA绘画函数Graphics2D,绘制文字。
本发明中椭圆图章绕椭圆文字均等分配的生成算法,生成椭圆图章绕椭圆文字间距均等分配,经测试所用的输入参数,得出的电子椭圆图章图片,均满足样式要求。在相对较低的复杂度的情况下,具有较高的效率,非常符合传统雕刻椭圆形图章的美观要求,可保证同等角度不同弧长下,文字占有空间均等分配,适用于椭圆、圆形图章,适宜推广应用。
附图说明
图1是本发明的流程图;
图2是本发明的椭圆图章文字分配算法示意图。
具体实施方式
以下结合附图和实施例对本发明作进一步说明。参见图1和图2。基于JAVA的椭圆图章文字均等分配的算法,其步骤如下:
输入:椭圆长度参数、椭圆宽度参数、图章文字参数、图章图片是否透明参数;
输出:电子图章图片文件。
已知椭圆印章图片的宽度为width,高度为height,椭圆文字占用的角度为angle,椭圆上文字参数text。
1、得到水平方向上椭圆的半径为X,垂直方向上椭圆的半径为Y;
X = width / 2; Y = height / 2;
2、得到开始角度A0;
A0 = - 90 - angle / 2;
3、以0.5°为一个旋转梯度;得到需要旋转多少次才可以到达终点角度;
step = 0.5°;
alCount = (int)Math.ceil(A0/step) + 1;
4、 定义一个数组,得到旋转次数和角度的关系;第一个角度为开始角度A0 ;定义旋转次数参数num为0;
double[] angArr = new double[alCount] ;
num = 0;
angArr[num] = A0 ;
5、 定义一个数组,得到旋转次数与弧长的关系;第一个弧长为0;
double[] arcLenArr = new double[alCount];
arcLenArr[num] = 0;
6、 根据A0 角度,得到该这个角度与椭圆相交点坐标(X0、Y0)。
X0= X * Math.cos(A0 * Math.PI / 180.0);
Y0= Y * Math.sin(A0 * Math.PI / 180.0);
7、 循环旋转次数alCount,得到每次旋转0.5°的弧长变化。
7.1 FOR 循环,初始值i=A0 +step;旋转次数num小于alCount;每次旋转0.5°。
for (double A = A0 + step;num < alCount; i += step);
7.2 旋转0.5°后的角度与椭圆的相交点X1、Y1;
X1 = X * Math.cos(A * Math.PI / 180.0);
Y1 = Y * Math.sin(A * Math.PI / 180.0);
7.3 根据勾股定理,计算旋转0.5°后,斜边移动的距离,即大概弧长;将每次旋转的弧长相加,得到旋转到当前角度时,与起始角度转过的总弧长;
Z += Math.sqrt((X1 - X0) * (X1- X0) + (Y1- Y0) * (Y1- Y0));
7.4 将旋转的次数与角度写入到数组angArr 中保存;
angArr[num] = A;
7.5 将旋转的次数与移动的弧长写到数组arcLenArr中保存;
arcLenArr[num] = Z;
7.6 将(X1、Y1)的坐标作为上一次的起始坐标(X0、Y0),将旋转次数num加一次;
X0 = X1;
Y0= Y1;
num++;
7.7 循环结束,得到角度与旋转次数关系数组angArr和旋转次数与旋转弧长的关系数组;得到椭圆文字占用的角度angle的弧长Zn。
8、 根据定义文字text,得到文字总字数count;
count = text.length;
9、 计算每个文字占用的弧长arcPer ;
double arcPer = Zn / count;
10、 循环文字个数,将文字一个一个依次写到对应的位置上;
For循环,定义文字从第一个开始,到最后一个字结束;
for ( i = 0; i < count; i++);
10.1计算第i个文字的中间位置占用的弧长;
double arcL = i * arcPer + arcPer / 2.0;
10.2 循环旋转次数与旋转弧长关系数组arcLenArr,找出最接近文字中心点的旋转次数,根据次数找出第i个文字中心点对应的角度;
for (int p = 0;p < arcLenArr.length - 1;p++);
10.3 如果第i个文字的中心位置arcL在旋转第p次的弧长和第p+1次的弧长之间,并且如果第i个文字的中心位置arcL,靠近第p次弧长,则根据数组angArr,得到第p次的旋转角度;如果第i个文字的中心位置arcL,靠近第p+1次弧长,则根据数组angArr,得到第p+1次的旋转角度ang;
if (arcLenArr[p] <= arcL && arcL <= arcLenArr[p+1]){
if(arcL >= (arcLenArr[p]+arcLenArr[p+1])/2.0)
ang = angArr[p + 1];
else
ang = angArr[p];
}
10.4 根据文字中心点的旋转角度ang和三角函数关系,得到与椭圆相交点(x,y);
x = X * (float)Math.cos(ang * Math.PI/180f);
y = Y * (float)Math.sin(ang * Math.PI/180f);
10.5 根据文字中心点的旋转角度ang和正切函数Math.atan2,得到文字倾斜率qxang;
qxang = Math.atan2(Y * Math.cos(ang * Math.PI/180f), -X * Math.sin(ang *Math.PI/180f));
10.6 根据java的AffineTransform类(2D仿射变换)设置文字的倾斜度;
AffineTransform transform1 = AffineTransform.getRotateInstance(fxang);
10.7 得到倾斜后的字体font;
Font font = font.deriveFont(transform1);
10.8 通过JAVA绘制类Graphics2D,设置倾斜后字体font;
g2.setFont(font);
10.9 根据文字循环次数i,得到需要绘制的文字c;
c = text.substring(i, i+1);
10.10 绘制文字;
g2.drawString(c, (float)x, (float)y);
10.11 第i个文字绘制结束,接着循环下一个文字,直到所有文字绘制结束。
电子图章文字的均等分配算法有着较为广泛的社会应用价值。特别是在通过技术手段生成椭圆型电子图章的时候,由于椭圆图章的长度与宽度不相等,相同角度不同位置对应的弧长不一样。椭圆图章的文字需要紧贴着椭圆图章的外圈圆弧,并且需要利用很小的旋转角度得到不同角度对应的弧长,再均等分配弧长,根据文字对应的弧长计算出对应的角度位置,即相同大小的文字由于位置不同所占用的角度大小也不一样且按照等弧长的规律排列。
Claims (1)
1.基于JAVA的椭圆图章文字均等分配的算法,其特征在于,其步骤如下:
1)将图章画布设置为透明颜色,图章设置为白色;根据输入的椭圆长宽参数和椭圆宽度参数,在指定的画布上以画布的中心点为圆心并运用Ellipse2D函数绘制出椭圆图形,根据图章文字参数所占用的弧长,计算图章文字在椭圆图形内绘制的起始度数和结束度数;
2)设置开始绘制文字的度数A0,通过计算三角函数值,得到距离椭圆图形的圆心位置,将角度A0旋转0.5°得到A1,再得到旋转后的距离圆心位置的值,通过函数计算得到旋转0.5°的弧长Z0:
(X1-X0)2+(Y1-Y0)2 = Z2
式中:X0 和Y0为椭圆图形圆心在画布的坐标初始点,X1和Y1为A1与椭圆的相交点距离圆心位置值,Z0为弧长;
3)根据角度A0和A1(A0+0.5°),三角函数cosA0、sinA0得到X0、Y0,同理得到X1、Y1;通过勾股定理Z2=(X1-X0)2+(Y1-Y0)2,计算三角形斜边长,即弧长Z0;
4)将每次旋转0.5°,直到角度超过结束绘制文字的角度,将每次旋转的弧长Z0,Z1......Zn的值相加得到总的弧长Z,得到旋转角度与弧长Z之间的关系;
5)根据所有文字占用的弧长和文字字数,得到每个文字占用的平均弧长;
6)根据每个文字占用的弧长和文字排序,得到每个文字中心点到弧长开始计算位置的长度,所对应的弧长Zn;
7)通过比较弧长Zn与旋转角度的关系,得到每个文字的旋转角度ang;
8)通过旋转角度ang,与椭圆参数X、Y的关系,得到文字距离圆心O的偏移距离x、y;
9)在得知每个文字的旋转角度ang和画布偏移距离x、y后,通过JAVA绘画函数Graphics2D,绘制文字。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010688751.2A CN111932647A (zh) | 2020-07-16 | 2020-07-16 | 基于java的椭圆图章文字均等分配的算法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010688751.2A CN111932647A (zh) | 2020-07-16 | 2020-07-16 | 基于java的椭圆图章文字均等分配的算法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111932647A true CN111932647A (zh) | 2020-11-13 |
Family
ID=73313718
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010688751.2A Pending CN111932647A (zh) | 2020-07-16 | 2020-07-16 | 基于java的椭圆图章文字均等分配的算法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111932647A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014130554A (ja) * | 2012-12-28 | 2014-07-10 | Noriyuki Yamada | 情報機器、認証方法、認証システム |
CN107291669A (zh) * | 2016-03-30 | 2017-10-24 | 北京天威诚信电子商务服务有限公司 | 一种文字沿椭圆圆弧均分的电子排版方法及装置 |
CN107944452A (zh) * | 2017-12-12 | 2018-04-20 | 深圳市创业印章实业有限公司 | 一种圆形印章文字识别方法 |
CN111046754A (zh) * | 2019-11-26 | 2020-04-21 | 泰康保险集团股份有限公司 | 一种文字识别方法、装置及计算机可读存储介质 |
-
2020
- 2020-07-16 CN CN202010688751.2A patent/CN111932647A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014130554A (ja) * | 2012-12-28 | 2014-07-10 | Noriyuki Yamada | 情報機器、認証方法、認証システム |
CN107291669A (zh) * | 2016-03-30 | 2017-10-24 | 北京天威诚信电子商务服务有限公司 | 一种文字沿椭圆圆弧均分的电子排版方法及装置 |
CN107944452A (zh) * | 2017-12-12 | 2018-04-20 | 深圳市创业印章实业有限公司 | 一种圆形印章文字识别方法 |
CN111046754A (zh) * | 2019-11-26 | 2020-04-21 | 泰康保险集团股份有限公司 | 一种文字识别方法、装置及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Marchesi | Megapixel size image creation using generative adversarial networks | |
JP2024038393A (ja) | 色空間変換技術に基づくターゲットに関連する画像の検出の最適化 | |
CN109993810A (zh) | 一种智能素描绘画方法、装置、存储介质及终端设备 | |
CN105303614A (zh) | 改进的qem三维模型简化方法 | |
WO2022077863A1 (zh) | 视觉定位方法及相关模型的训练方法及相关装置、设备 | |
CN103955707A (zh) | 一种基于深度层次特征学习的海量图像分类系统 | |
CN107526526A (zh) | 确定压感笔迹区域的方法及装置 | |
CN106846490B (zh) | 一种弧面模型用于在3d场景进行展示的展示方法及装置 | |
CN106779590A (zh) | 一种电子印章的生成方法以及系统 | |
CN108765554A (zh) | 基于超维的非均质岩心三维重建方法 | |
WO2023087893A1 (zh) | 对象处理方法、装置、计算机设备、存储介质及程序产品 | |
CN103810756A (zh) | 基于不规则区域的自适性的Loop细分曲面的绘制方法 | |
CN105577325A (zh) | 一种应用于正交分频复用传输系统的并行处理交织器 | |
CN111815726B (zh) | 一种基于计算机视觉识别系统的椭圆角度编码解码方法 | |
CN111932647A (zh) | 基于java的椭圆图章文字均等分配的算法 | |
CN115909353A (zh) | 一种图像二值化处理方法和装置 | |
Ollivier‐Gooch | Coarsening unstructured meshes by edge contraction | |
CN105741297B (zh) | 一种具有仿射不变性的重复模式图像匹配方法 | |
CN109844774A (zh) | 一种并行反卷积计算方法、单引擎计算方法及相关产品 | |
CN111160371B (zh) | 一种orb均匀提取特征点方法 | |
CN108897912B (zh) | 基于圆堆的孔装饰板设计排布方法 | |
CN106951901A (zh) | 一种基于b型双链量子遗传算法的二维最大熵图像分割方法 | |
CN104346798A (zh) | 目标轮廓多边形逼近方法及其装置 | |
CN106652036B (zh) | 面向高效渲染的二维三角网格生成方法 | |
CN116563443A (zh) | 一种基于3d生成对抗网络的鞋子外观设计和用户定制系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20201113 |
|
WD01 | Invention patent application deemed withdrawn after publication |