当前位置:文档之家› 一种椭圆曲线快速生成算法

一种椭圆曲线快速生成算法

一种椭圆曲线快速生成算法
一种椭圆曲线快速生成算法

一种椭圆曲线参数生成的快速算法

谷勇浩 刘勇

(北京邮电大学通信网络综合技术研究所)

摘要:椭圆曲线密码体制是公钥密码中的研究热点。该文介绍了椭圆曲线密码体制的基本概念及相关知识,讨论了目前基于离散对数问题的椭圆曲线密码的研究动态。本文的创新点是针对目前椭圆曲线研究重点之一——椭圆曲线参数生成算法,给出了一种生成参数a 、b 的快速算法。这种算法利用了Jacobi 符号和二次剩余的理论,并且用matlab 计算出利用这种算法生成一个椭圆曲线的平均时间,最后我们分析了今后椭圆曲线密码系统的研究方向和重点。

关键词:椭圆曲线;离散对数问题;Jacobi 符号;二次剩余;阶

1976年Diffie 和Hellman 提出公钥密码思想以来,国际上提出了许多种公钥密码体制的实现方案。一些已经被攻破,一些被证明是不可行的。目前,只有3类公钥密码体制被认为是安全有效的,按照其所依据的数学难题划分为:基于大整数分解问题(IFP ),如RSA 体制和Rabin 体制;基于有限域离散对数问题(DLP ),如Diffie-Hellman 体制和ElGamal 体制;基于椭圆曲线离散对数问题(ECDLP ),如椭圆密码体制。椭圆曲线应用到密码学上最早是由Neal Koblitz 和Victor Miller 在1985年分别独立提出的。它是目前已知的公钥体制中,对每一比特所提供加密强度最高的一种体制。它具有安全性高、密钥量小、灵活性好的特点,受到了国际上的广泛关注。而SET(Secure Electronic Transaction)协议的制定者已把它作为下一代SET 协议中缺省的公钥密码算法。深入研究基于椭圆曲线离散对数问题的公钥密码具有很大的现实意义。

1建立椭圆曲线公钥密码体制

1.1椭圆曲线域的参数

在基于椭圆曲线的加解密和数字签名的实现方案中,首先要给出椭圆曲线域的参数来确定一条椭圆曲线。在 IEEE P1363标准中,定义其参数为一个七元组:T=(q,FR,a,b,G,n,h),其中q 代表有限域GF(q),q 为素数或

2

m

;FR 为域表示法,如f(x)为

2

m

F 域元素的不可约

多项式的表示法;曲线的方程,当q 为素数时,方程为2

3

ax b y

x =++,当q 为2m

时,

方程为

2

32

xy a b y

x x +=++,a,b 是方程中的系数;G 为基点;n 为大素数并且等于点G

的阶,h 是小整数称为余因子且#()/q

h E n F

=。主要的安全性参数是n ,因此ECC 密钥

的长度就定义为n 的长度。

1.2椭圆曲线密码的密钥

选取了基域

q

F

和椭圆曲线后,得到了在有限域

q

F

上的曲线E 确定的具体形式,即

上述的椭圆曲线域参数的一个七元组。每个用户选取一个整数d(1≤d ≤n-1) 作为其私钥,而以点Q=dG(G 为基点)作其公钥,这样形成一个椭圆曲线公钥密码系统。在这个密码体制中,具体的曲线,基域

q

F

,基点G 及其阶n ,以及每个用户的公钥都是该系统的公开参

数,每个用户的私钥是保密的。

1.3基于椭圆曲线密码体制的加解密

假设用户A 欲将明文m 加密后发送给B ,A 执行以下操作: (1)查找B 的公钥(E(

q

F

,G ,n ,

B

Q

));

(2)将m 表示成一个域元素,即q

m F

(3)在区间[1,n-1]内选取一个随机数k ; (4)计算点1

1

(

,)kG y x =;

(5)依据B 的公钥计算点22

(,)B

k Q

y x =,若2x =0,则返回到第(3)步;

(6)计算2

C m x

=?

(7)传送加密数据1

1

(,,)C y x 给B 。

B 收到A 的密文1

1

(,,)C y x 后,执行以下操作。

(1)使用私钥

B

d

,计算点121

2

(,)(,)B y y d x x =,再计算q F 中1

2()x -;

(2)计算m=C

1

2()

x -,得到明文m 。

2 椭圆曲线密码的研究动态

2.1椭圆曲线密码的安全性

ECC 的安全性是建立在离散对数问题计算难度基础之上,如果离散对数可以计算,从

一个用户的公钥就可得到他的私钥,ECC 就不安全了。对于一般的ECDLP ,目前有两种较好的求解法[1]:Pohlig-Hellman 方法和Pollard-ρ方法。但是对于两类特殊的椭圆曲线,已经有了其他有效的求解方法。一类特殊的椭圆曲线——超奇异椭圆曲线[2](设

q

F

的特征为p ,

/q

E F

的q 阶Frobenius 变换的迹t 是p 的倍数时,E 称为超奇异的),采用概率亚指数算

法——MOV 算法和FR 算法可以解决ECDLP 。另一类特殊椭圆曲线是异常(anomalous)椭圆曲线[2](设m

q p

=

,p ≠2,3为素数,

/q

E F

由方程2

3

ax b y

x =++定义,()

q P E F ∈的阶为p 。当p=q 时,异常曲线上的p 阶Frobenius 变换的迹t=1),SSSA 算法可以解决ECDLP 。

2.2 椭圆曲线的选取

要保证椭圆曲线密码的安全性,就是要使所选取的曲线能抵抗上述的关于ECDLP 解决的方法和算法,所以选取一条安全的椭圆曲线,是一个深刻的数学难题,在此,仅提供几点椭圆曲线选取的安全准则[3]: (1)为了抗击Pollard-ρ攻击,所选取EC 的阶#E(GF(q))的分解式中应该包含一个大的素数因子,目前应不小于160bit ;

(2)为了抗击Weil 对和Tate 对的攻击,对于1≤k ≤30,n 不能除

1k

q

-(不宜选取超

奇异椭圆曲线);

(3)为了抗击Semaev-Smart-Satoh-Araki 的攻击所选曲线的阶不能等于该曲线所定义的有限域的阶,即#E(

q

F

)≠q (不宜选取异常椭圆曲线);

(4)对于二进制域GF(

2

m

)的度m 不宜为合数。Gaudry ,Hess 和Smart 提出,若m 有小

约数l (l=4),存在比Pollard's rho 算法更快求解ECDLP 的方法。

下面介绍3种选择适宜的椭圆曲线的方法: (1)仅限于有限域为

2

m

F 上构造椭圆曲线。其原理是将定义在特征值比较小的有限域的

椭圆曲线提升到该域的扩域上去,并且m 能被小整数k ≥1整除。这种方法简单,但是得到的曲线较少。

(2)CM(Complex Multiplication)法,根据给定的阶来选取符合此阶的椭圆曲线。它的实现速度相对较快,但这种方法产生的椭圆曲线具有附带的结构特征。从安全性角度讲,这是一个潜在的威胁。

(3)随机选取曲线。随机选取曲线的参数a,b ∈

q

F

如果q 是素数,则满足3

2

4270a

b +≠;

如果q=2m

,则b ≠0,然后计算u=#E(Fq)和大素数因子n ,直到所选曲线满足安全需求。这种方法比较理想,选取的曲线安全级别高,它完全依赖于椭圆曲线阶的计算。

2.3椭圆曲线阶的计算

从上述椭圆曲线的安全性来看,如果曲线的阶充分大,平方根攻击如Shanks's baby-step gaint-step 或Pollard's ρ方法就不太有效,要能抗击Pohlig-hellman 攻击,一个好的策略是确保曲线的阶#E(Fq)中包含有大素数因子(该大素数作为所选取基点P 的阶)使得

P,Pohlig-hellman 算法的O 计算量不能实现。由此看来,计算#E(Fq)是研究定义在有限域上的椭圆曲线的一个核心问题。

对于#E(Fq)的计算是一个纯粹的数学问题。目前有两种方法可以采用: (1)随机选取一条定义于有限域

q

F

的椭圆曲线,直接计算该曲线的阶,使其满足#E(Fq)

中包含有大素数因子。在这方面,R. School 做了开创性的工作,提出了著名的School 算法,后经Atkin 和Elkies 的改进,提出了SEA(School Elkies Atkin)算法。后来,Morain,Lercier 等人又对它作了一些优化,如今SEA 算法已成为计算椭圆曲线阶的有效算法。另外,Satoh 也提出了比较有效的算法及目前对于二进制域效率较高的Satoh-FGH 算法。 (2)仅限于有限域为

2

m

F 且它要求所定义的

2

m

F 有限域中的m 能分解为m=de ,其

中d 为一个小整数,通过计算子域

2

d

F 上的#E(

2

d

F ),从而计算出#E(

2

de

F )。这种方法

简单易实现,但是适用范围较小,不能计算出任意m 或固定m 的#E(

2

d

F )。

2.4 椭圆曲线的快速算法

在椭圆曲线密码体制应用中的大量运算是倍乘(数乘),就是一串点的加法运算,即计算k*P=P+P+?+P 共有k 个P 相加。椭圆曲线密码快速实现的关键就是快速实现kP 的运算

(包括算法优化和程序优化、软件实现和硬件实现)。其中kP 的运算主要基于两方面的运算:基域上域元素和曲线上点的运算。这些运算与我们所选取的有限域、采用的坐标系、基域中的元素表示方法、选取怎样的椭圆曲线和计算kP 的方法有关。因为同一基域中的元素表示方法不一样(如

2

m

F 中有多项式和通项表示法);不同的坐标系(如仿射坐标和射影

坐标)下,都会影响kP 的计算量。对于一些特殊的曲线,如Koblitz curves ,已经有了较好

的算法,但是对一般随机的椭圆曲线,如何快速计算kP 仍是一个需要研究的问题。

3 椭圆曲线参数快速生成算法

3.1产生椭圆曲线的传统算法

通常情况下,从特定秩生成曲线组中随机选取一个作为椭圆曲线。下面的算法生成基于GF(p)域的椭圆曲线参数,而且能够生成足够的信息能使其他人验证这样的曲线的确是随机生成的。

选定如下参数[4]

素数模p ;基点秩的上下界

max

r

min

r

;输出长为B 比特的Hash 函数H ,其中

min 2

1()2log B r ??

≥????

;以及Hash 函数的输入比特长L ,L B ≥。

还要使用如下的符号:

v = 2

log p ?

???;s = (1)v B -??????

;w = v -Bs -1 算法输入:p ,

min

r

max

r

max

l

(用于测试的除数的上限,满足

max

l

<

min

r

);

算法输出:比特串X ;EC 参数q=p ,a ,b ,r ,G (1) 选择长为L 的比特串X ; (2) 计算h=H(X);

(3) 选取h 的最右面的w 比特串计为0

W

(4) 将字符串X 转换为整数z ; (5) I 从1到s ,作如下循环

(5.1)将整数(z+i)mod(2

L

)转化为长为L 的比特串

i

X

(5.2)计算

i

W

=H(

i

X

);

(6) 将所有的

i

W

以如下形式合并成W :

01||||...||s W W W W =

|| 代表连接

(7) 将长对为v-1的字符串W 转换为整数c ; (8) 如果c=0或4c+27≡0(mod p)则返回到(1); (9) 选择整数a ,b ∈GF(p),满足2

3

(mod )c

p b

a ≡;

(最简单的方式是选择a=c ,b=c 。但是,出于性能的考虑,我们要选择其他的a,b )

(10) 给定基于GF(p)的椭圆曲线E :

2

3

ax b y

x =++,计算它的秩u ;

(11) 测试u 的素性概率;

(12) 如果u 几乎不可能是素数,则返回(1);否则通过 ?? 的输出中含有k ,r ; (13) 生成秩为r 的曲线E 上的点G ; (14) 输出X ,a ,b ,r ,G 。

3.2 改进的a 、b 生成算法

为了计算(9)中2

3

(mod )c

p b

a ≡,已经有很多中算法(例如,进化算法)

,但是生成参数a ,b 仍然需要花费很长时间。根据IEEE 1363中介绍的方法生成椭圆曲线参数的时

间大约为15s ,所以,生成一个椭圆曲线需要的时间仍然是一个有待解决的问题。

为了解决椭圆曲线生成时间上的问题,本文将介绍一种新的方案,来解决

23

(mod )c p b a ≡计算上的问题。这种方法是基于雅可比符号(Jacobi Symbol )和二次剩

余(Quadratic Residue )理论。算法步骤如下:

(1) 选定一个迭代数;

(2) 随机生成参数c (长度为256比特); (3) 生成向量M (a ,b ,f ),其中a (长度为256比特)是随机的,b=0,f 为一个

大整数;

(4) 处理向量M 的过程:

(4.1)计算

1

c

-(mod p );

(4.2)计算(

1

c

-(mod p )?

3

a

)mod p = h ;

(4.3)计算Jacobi 符号()h

p

(4.4)如果()h p =1,则

2

mod h p b

≡;

(4.5)如果()h p

≠1,则随机生成新的a (长度为256比特),返回(4.1);

(5) 计算f = 2

3

(mod )(mod )c p p b a ?

-;如果f = 0,则向量(a ,b ,c )就是生

成的结果;

(6) 返回(4),知道向量M 中所有的EC 都处理完; (7) 随机生成新的c (长度为256比特),返回(3)。

有了这种算法,可以加快a、b的生成,再结合参考文献4中介绍的其他参数的生成算法,就可以快速生成安全而且有效的椭圆曲线,并且可以把它用于生成抗攻击的密码系统中。

4 结束语

椭圆曲线密码是一种能适应未来通信技术和信息安全技术发展的新型密码体制,它在运算速度和存储空间方面占有很大的优势,目前它已成为公钥密码体制中的研究热点。实际上椭圆曲线密码算法还有几个地方有待完算,今后主要的研究方向有3个方面[5]:(1)如何快速选取安全性高的椭圆曲线。

(2)如何有效计算椭圆曲线的阶。因为选取安全椭圆曲线的核心步骤是对椭圆曲线阶的计算,对计算椭圆曲线阶的有效算法的研究也是实现安全椭圆曲线密码体制的

一个极其重要的环节。

(3)在椭圆曲线密码体制中,椭圆曲线群上点的倍乘占了整个运算的很大比例,它的效率关系到整个体制的执行效率。对椭圆曲线中的kP倍乘计算仍需研究一种高

效快速的方法。

参考文献

[1] 李学俊,敬忠良等. 基于椭圆曲线离散对数问题的公钥密码. 计算机工程与应用. 2002,38(6):20-22.

[2] 斐定一,祝跃飞. 算法数论. 北京:科学出版社,2002.

[3] Lopez J, Dahab R. An Overview of Elliptic Curve Cryptography. Technical Report, Institute of Computing, State University of Campinas, Brazil, 2000-05-22.

[4] IEEE Std 1363-2000: IEEE Standard Specifications for Public-Key Cryptography. 2000.1.30. P146-147.

[5] 张雁,林英,郝林. 椭圆曲线公钥密码体制的研究热点综述. 计算机工程第30卷第3期 2004.2.

作者简介

谷勇浩男,1980年8月生于山西省太原市,2002年7月获得杭州电子科技大学(原杭州电子工业学院)计算机科学与技术学士学位。目前正在攻读北京邮电大学通信与信息工程博士学位。主要研究方向:入侵检测、风险评估、密码学。

刘勇男,教授,博士生导师。研究方向:下一代无线通信技术、网络及信息安全。

常见OTDR测试曲线解析

常见OTDR测试曲线解析 一、正常曲线 一般为正常曲线图, A 为盲区, B 为测试末端反射峰。测试曲线为倾斜的,随着距离的曾长,总损耗会越来越大。用总损耗( dB )除以总距离( Km)就是该段纤芯的平均损耗( dB/Km )。 二、光纤存在跳接点 中间多了一个反射峰,因为很有可能中间是一个跳接点,现城域网光缆中,比较常见。如:现主干光缆由汇接局至光缆交接箱,当有需求时,需由光交接箱布放光缆至用户端,光交接箱就需跳纤联接,所以在测试这样的纤芯时,就会出现像图中这样的曲线图。当然也会有例外的情况,总之,能够出现反

射峰,很多情况是因为末端的光纤端面是平整光滑的。端面越平整,反射峰越高。例如在一次中断割接当中,当光缆砍断以后,测试的曲线应该如光路存在断点图所示,但当你再测试时,在原来的断点位置出现反射峰的话,那说明现场的抢修人员很有可能已经把该纤芯的端面做好了。 三、异常情况 出现图中这种情况,有可能是仪表的尾纤没有插好,或者光脉冲根本打不出去,再有就是断点位置比较进,所使用的距离、脉冲设置又比较大,看起来就像光没有打出去一样。出现这种情况,1、要检查尾纤连接情况; 2、就是把OTD R的设置改一下,把距离、脉冲调到最小,如果还是这种情况的话,可以判断: 1、尾纤有问题;2、OTDR 上的识配器问题; 3、断点十分近,OTDR不足以测试出距离来。如果是尾纤问题,只要换一根尾纤就知道,不行的话就要试着擦洗识配器,或就近查看纤芯了。 四、非反射事件

1、这种情况比较多见,曲线中间出现一个明显的台阶,多数为该纤芯打折,弯曲过小,受到外界损伤等因素,多为故障点。 2、若光纤模式、折射率不一样,接续时也会出现此情况,常见光纤G651光纤(标准单模光纤,B1光缆),G653光纤(色散位移光纤,B2光缆)。造成这种现象的原因是由于接头两侧光纤的背向散射系数不一样,接头后光纤背向散射系数大于前段光纤背向散射系数,而从另一端测则情况正好相反,折射率不同也有可能产生增益现象。所以要想避免这种情况,只要用双向测试法就可以了。 五、光纤存在断点 这种情况一定要引起注意!曲线在末端没有任何反射峰就掉下去了,分析:1如果知道纤芯原来的距离,1、在没有到达纤

DDA直线生成算法

实验报告 课程名称计算机图形学 实验名称DDA直线生成算法编程的实现实验类型验证型 实验地点计通学院304实验日期2010-03-29指导教师 专业 班级 学号 姓名 成绩 辽宁石油化工大学计算机与通信工程学院

实验报告说明 1、封面内容 (1)课程名称:实验所属的课程的名称。 (2)实验名称:要用最简练的语言反映实验的内容。要求与实验指导书中相一致。 (3)实验类型:说明是验证型实验、设计型实验、创新型实验还是综合型实验。 2、正文内容 实验报告的正文内容须包括以下内容: (1)实验目的:目的要明确,要抓住重点,符合实验指导书中的要求。 (2)实验内容:说明本实验的主要内容。 (3)实验原理:简要说明本实验项目所涉及的理论知识。 (4)实验环境:实验用的软硬件环境(配置)。 (5)实验方案:对于验证性型实验,写明依据何种原理、操作方法进行实验;对于设计型和综合型实验,写明依据何种原理、操作方法进行实验,并画出硬件组成图、软件流程图、设计思路和设计方法,再配以相应的文字说明;对于创新型实验,除符合设计型和综合型实验要求外,还应注明其创新点、特色。(6)实验步骤:写明实验的实施步骤,包括实验过程中的记录、数据。 (7)实验结果与分析:写明实验的最终结果,并对结果进行分析,做出结论。(8)实验中遇到的问题及解决方法:写明实验过程中遇到的问题及所采取的解决方法。 (9)实验总结(在封底上):写出对本次实验的心得体会、思考和建议。

实验原理:已知线段的起点坐标()11x y ,终点坐标()22x y ,直线的点斜 式方程为:y m x b =?+,斜率和截距分别为:2121y y m x x -= - , 11b y m x =-? 。沿x 的增量为x ?,沿y 的增量为y ?,即: 1x y m ?= ??,y m x ?=??。当1m ≤时,取x 为一个像素单位长,即x 每次增加一个像素,然后利用公式计算相应的y 值:1k k k y y y y m x -=+?=+??,相反1m >时,可以通过质量y ?来计算相应的x 值:1k k k x x x x m y -=+?=+??。 实验内容:新建一个Win32 Application 的典型“Hello World ”程序,工程 命名为:DDA 直线生成算法,打开DDA 直线生成算法.cpp 文件, 在里面加入代码: void DDA_line(HDC hdc) { double x,y,dx,dy,L,x1=100,x2=400,y1=100,y2=400; if(abs(x2-x1)>=abs(y2-y1)) L=abs(x2-x1); else L=abs(y2-y1); dx=(x2-x1)/L; dy=(y2-y1)/L; x=x1,y=y1; for(int k=1;k<=L;k++) { SetPixel(hdc,x,y,RGB(255,0,255)); x=x+dx; y=y+dy; Sleep(10); } } 实验结果:调用程序运行得出一下结果:

一种椭圆曲线快速生成算法

一种椭圆曲线参数生成的快速算法 谷勇浩 刘勇 (北京邮电大学通信网络综合技术研究所) 摘要:椭圆曲线密码体制是公钥密码中的研究热点。该文介绍了椭圆曲线密码体制的基本概念及相关知识,讨论了目前基于离散对数问题的椭圆曲线密码的研究动态。本文的创新点是针对目前椭圆曲线研究重点之一——椭圆曲线参数生成算法,给出了一种生成参数a 、b 的快速算法。这种算法利用了Jacobi 符号和二次剩余的理论,并且用matlab 计算出利用这种算法生成一个椭圆曲线的平均时间,最后我们分析了今后椭圆曲线密码系统的研究方向和重点。 关键词:椭圆曲线;离散对数问题;Jacobi 符号;二次剩余;阶 1976年Diffie 和Hellman 提出公钥密码思想以来,国际上提出了许多种公钥密码体制的实现方案。一些已经被攻破,一些被证明是不可行的。目前,只有3类公钥密码体制被认为是安全有效的,按照其所依据的数学难题划分为:基于大整数分解问题(IFP ),如RSA 体制和Rabin 体制;基于有限域离散对数问题(DLP ),如Diffie-Hellman 体制和ElGamal 体制;基于椭圆曲线离散对数问题(ECDLP ),如椭圆密码体制。椭圆曲线应用到密码学上最早是由Neal Koblitz 和Victor Miller 在1985年分别独立提出的。它是目前已知的公钥体制中,对每一比特所提供加密强度最高的一种体制。它具有安全性高、密钥量小、灵活性好的特点,受到了国际上的广泛关注。而SET(Secure Electronic Transaction)协议的制定者已把它作为下一代SET 协议中缺省的公钥密码算法。深入研究基于椭圆曲线离散对数问题的公钥密码具有很大的现实意义。 1建立椭圆曲线公钥密码体制 1.1椭圆曲线域的参数 在基于椭圆曲线的加解密和数字签名的实现方案中,首先要给出椭圆曲线域的参数来确定一条椭圆曲线。在 IEEE P1363标准中,定义其参数为一个七元组:T=(q,FR,a,b,G,n,h),其中q 代表有限域GF(q),q 为素数或 2 m ;FR 为域表示法,如f(x)为 2 m F 域元素的不可约 多项式的表示法;曲线的方程,当q 为素数时,方程为2 3 ax b y x =++,当q 为2m 时, 方程为 2 32 xy a b y x x +=++,a,b 是方程中的系数;G 为基点;n 为大素数并且等于点G 的阶,h 是小整数称为余因子且#()/q h E n F =。主要的安全性参数是n ,因此ECC 密钥 的长度就定义为n 的长度。 1.2椭圆曲线密码的密钥 选取了基域 q F 和椭圆曲线后,得到了在有限域 q F 上的曲线E 确定的具体形式,即 上述的椭圆曲线域参数的一个七元组。每个用户选取一个整数d(1≤d ≤n-1) 作为其私钥,而以点Q=dG(G 为基点)作其公钥,这样形成一个椭圆曲线公钥密码系统。在这个密码体制中,具体的曲线,基域 q F ,基点G 及其阶n ,以及每个用户的公钥都是该系统的公开参

Bresenham的直线生成算法和整圆生成算法完整代码

以下是Bresenham的直线生成算法和整圆生成算法,已调试过,没有任何问题。Bresenham直线生成算法 #include "stdio.h" #include "graphics.h" Bresenham_line(x0,y0,x1,y1,color) int x0,y0,x1,y1,color; { int x,y,dx,dy, i; float k,e; dx=x1-x0;dy=y1-y0; k=(dy*1.0)/dx; e=-0.5; x=x0; y=y0; for (x=x0; x<=x1; x++) { putpixel(x,y,color); e=e+k; if(e>=0) { y++;e=e-1;} } } int main() { int x0,y0,x1,y1,c; int driver=DETECT,mode=0; initgraph(&driver,&mode,"c:\\tc"); setbkcolor(BLUE); setcolor(YELLOW); printf("input x0,y0,x1,y1,c"); scanf("%d%d%d%d%d",&x0,&y0,&x1,&y1,&c); Bresenham_line(x0,y0,x1,y1,c); getch(); closegraph(); } 当取e=2*dy-dx时,可以消除浮点和除法运算 #include "stdio.h" #include "graphics.h" Bresenham_line(x0,y0,x1,y1,color)

int x0,y0,x1,y1,color; { int x,y,dx,dy, i,e; float k; dx=x1-x0;dy=y1-y0; k=(dy*1.0)/dx; e=2*dy-dx; x=x0; y=y0; for (x=x0; x<=x1; x++) { putpixel(x,y,color); e=e+2*dy; if(e>=0) { y++;e=e-2*dx;} } } int main() { int x0,y0,x1,y1,c; int driver=DETECT,mode=0; initgraph(&driver,&mode,"c:\\tc"); setbkcolor(BLUE); setcolor(YELLOW); printf("input x0,y0,x1,y1,c"); scanf("%d%d%d%d%d",&x0,&y0,&x1,&y1,&c); Bresenham_line(x0,y0,x1,y1,c); getch(); closegraph(); }

炉温测试板制作及曲线测试规范(20200517094721)

炉温测试板制作及曲线测试规范 1、目的: 规范SMT炉温测试方法,为炉温设定、测试、分析提供标准,确保产品质量。为炉温曲线的 制作、确认和跟踪过程的一致性提供准确的作业指导; 2、范围: 本规范适用于公司PCBA部SMT车间所有炉温设定、测试、分析及监控。 3.定义: 3.1升温阶段:也叫预热区,从室温到120度,用以将PCBA从环境温度提升到所要求的活性 温度;升温斜率不能超过3°C度/s;升温太快会造成元件损伤、会出现锡球现象,升 温太慢锡膏会感温过度从而没有足够的时间达到活性温度;通常时间控制在60S左右; 3.2恒温阶段:也叫活性区或浸润区,用以将PCBA从活性温度提升到所要求的回流温度; 一是允许不同质量的元件在温度上同质;二是允许助焊剂活化,锡膏中挥发性物质得到 有利挥发,一般普遍的锡膏活性温度是120-150度,时间在60-120S之间,升温斜率一 般控制在1度/S左右;PCBA上所有元件要达到熔锡的过程,不同金属成份的锡膏熔点 不同,无铅锡膏(SN96/AG3.5/CU0.5)熔点一般在217-220度,有铅(SN63/PB37)一 般在183度含银(SN62/PB36/AG2)为179度; 3.3回流阶段:也叫峰值区或最后升温区,这个区将锡膏在活性温度提升到所推荐的峰值温 度,加热从熔化到液体状态的过程;活性温度总是比熔点低,而峰值温度总在熔点之上, 典型的峰值温度范围是(SN63/PB37)从205-230度;无铅(SN96/AG3.5/CU0.5)从235-250 度;此段温度设定太高会使升温斜率超过2-5度/S,或达到比所推荐的峰值高,这种情 况会使PCB脱层、卷曲、元件损坏等;峰值温度:PCBA在焊接过程中所达到的最高温度; 3.4冷却阶段:理想的冷却曲线一般和回流曲线成镜像,越是达到镜像关系,焊点达到的固 态结构越紧密,焊点的质量就越高,结合完整性就越好,一般降温斜率控制在4度/S; 4、职责: 4.1 工程部 4.1.1工程师制定炉温测试分析标准,炉温测试员按此标准测试、分析监控炉温。 4.1.2 指导工艺技术员如何制作温度曲线图; 4.1.3 定义热电偶在PCB上的测试点,特别是对一些关键的元件定位; 4.1.4基于客户要求和公司内部标准来定义温度曲线的运行频率;

弗洛伊德算法(自动生成图)

#include #include #include #include #include clock_t start,finish; long double duration; #define MAX_NAME 5 // 顶点字符串的最大长度+1 #define MAX_INFO 20 // 相关信息字符串的最大长度+1 #define INFINITY INT_MAX // 用整型最大值代替∞ #define MAX_VERTEX_NUM 100 // 最大顶点个数 typedef char V ertexType[MAX_NAME]; // 顶点数据类型及长度 typedef enum{DG, DN, AG, AN} GraphKind; // {有向图,有向网,无向图,无向网} // 邻接矩阵的数据结构 typedef struct { int adj; // 顶点关系类型。对无权图,用1(是)或0(否)表示相邻否; // 对带权图,则为权值类型 }ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 图的数据结构 typedef struct { AdjMatrix arcs; // 邻接矩阵 int vexnum, // 图的当前顶点数 arcnum; // 图的当前弧数 GraphKind kind; // 图的种类标志 } MGraph; typedef int PathMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef int DistancMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 采用数组(邻接矩阵)表示法,构造有向网G。 //int CreateDN(MGraph *G,FILE *F,FILE *IN) int CreateDN(MGraph *G,FILE *F) { int i,j,k,w,t,m[100]; int n=0; printf("请输入有向网G的顶点数:"

计算机图形学 直线的生成算法的实现

实验二 直线的生成算法的实现 班级 08信计2班 学号 59 姓名 分数 一、实验目的和要求 1.理解直线生成的基本原理。 2.掌握几种常用的直线生成算法。 3.利用Visual C++实现直线生成的DDA 算法。 二、实验内容 1.了解直线的生成原理,尤其是Bresenham 画线法原理。 2.掌握几种基本的直线生成算法:DDA 画线法、Bresenham 画线法、中点画线法。 3.利用Visual C++实现直线生成的DDA 算法,在屏幕上任意生成一条直线。 三、实验步骤 1.直线的生成原理: (1)DDA 画线法也称数值微分法,是一种增量算法。是一种基于直线的微分方程来生成直线的方法。 (2)中点画线法原理 以下均假定所画直线的斜率[0,1]k ∈,如果在x 方向上的增量为1,则y 方向上的增量只能在01 之间。中点画线法的基本原理是:假设在x 坐标为p x 的各像素点中,与直线最近者已经确定为(,)p p P x y ,用小实心圆表示。那么,下一个与直线最近的像素只能是正右方的1(1,)p p P x y +,或右上方的2(1,1)p p P x y ++,用小空心圆表示。以M 为1P 和2P 的中点,则M 的坐标为(1,0.5)p p x y ++。又假设Q 是理想直线与垂直线1p x x =+的交点。显然,若M 在Q 的下方,则2P 离直线近,应取2P 为下一像素点;若M 在Q 的上方,则1P 离直线近,应取1P 为下一像素点。 (3)B resenham 画线法原理 直线的中点Bresenham 算法的原理:每次在主位移方向上走一步,另一个方向上走不走步取决于中点偏差判别式的值。 给定理想直线的起点坐标为P0(x0,y0),终点坐标为P1(x1,y1),则直线的隐函数方程为: 0b kx y y)F(x,=--= (3-1) 构造中点偏差判别式d 。 b x k y y x F y x F d i i i i M M -+-+=++==)1(5.0)5.0,1(),(

椭圆拓展(一)椭圆中的中点弦点差法

椭圆拓展(一) 椭圆内的中点弦点差法 【学习重点】 1.点差法的基本思想方法:设而不求 2.点差法适用范围:斜率固定的平行线截二次曲线所得线段 中点的轨迹,一般用于椭圆内的中点弦问题。(在圆内应该用特殊方法) 3.点差法的核心:求直线斜率和中点弦坐标的等量关系。 【核心推论】 1. 过定点直线和封闭曲线恒有公共点的充要条件是定点在曲线内部或曲线上。 过定点直线和封闭曲线恒有两个公共点的充要条件是定点在曲线内部。 2. 斜率为k1的直线,交椭圆x2 a2 + y2 b2 =1 (a>b>0)于两点,弦中 点与原点连线的斜率为k2,则k1?k2= b2 a2。

斜率为k 1的直线,交椭圆 y 2a 2 x 2b 2 =1 (a>b>0)于两点,弦 中点与原点连线的斜率为k 2,则 k 1?k 2= 2。 3. 平行弦的中点轨迹方程是过原点的、一条无端点、取椭圆内部分的线段。 【重点例题解析】 例题 已知P(-3,0),过点P 作直线l 交椭圆 x 2 4 +y 2 =1 于A 、 B 两点,求A 、B 的中点M 的轨迹方程。 解:设A(x 1,y 1)、B(x 2,y 2)、 x 1 2 4 +y 12 =1 x 22 4 +y 22 =1 x 12 -x 2 2 4 +(y 12-y 22 )=0 14 (x 1+x 2)(x 1-x 2) +(y 1+y 2)(y 1-y 2)=014 (x 1+x 2)+(y 1+y 2) (y 1-y 2)(x 1-x 2) =0

∴轨迹方程为: 14 (2x)+(2y)?k AB =0 14 (2x)+(2y)?k MP =0 14 (2x)+(2y)? y x+3 =0 x 2 +3x+4y 2 =0 (取x 2 24 +y 22 =1的内部)

动态模量主曲线生成方法

主曲线使用方法 主曲线是一种将有限试验结果扩展至无限范畴的方法,它的前提是实验材料的力学特性具有时温特效,尤其是有机材料。 在时间历程上,测试4-5个温度(或者荷载)条件下的试验数据,然后,将其绘制在时间(x)-试验数据(y)的双对数log-log坐标轴上,使用时-温转换,得到主曲线。时-温转化的方法一般是,首先选择关注温度,并将该温度作为主温度;然后,顺次将不同温度下的数据沿时间(x)轴进行平移,平移多少由转换因子大小决定;最终,得到主曲线。 转换因子大小与温度值有关,可以选择WLF公式,也可以选择Arrhenius(阿尼乌斯)公式来计算,二者均可以从很多文献里获取。当不同的温度的曲线向主温度曲线处平移时,转换因子的正负便与平移方向有关,向左移是“+”,向右移是“-”(突然想起高中数学老师教的“+左-右”)。 有了上边的基本概念,就可以进行实际操作了,很简单,所有的操作都是在EXCEL表格里进行(在雅虎搜索里输入NCHRP09-29_mastersolver2-2.xls,点搜索后获取),只是要保证EXCEL 里装了solver规划求解宏(以OFFICE2007为例,点击左上角windows-Excel选项-加载项-规划求解加载项-转到-规划求解加载项-确定,如下图所示)。

在EXCEL表格DATA的sheet里,输入动态模量值和混合料其他体积参数,然后进入FIT的sheet里,将C4:C7里的数据拷贝到B4:B7,点击“规划求解”启动宏,目标单元格选择为Ⅰ23,“等于”这一项选择“最小值”,可变单元格选择为B4:B7,点击“求解”便可得到最小二乘法所列的最佳值。一般情况下,只需要一次计算就够了,个别的情况,可在使用一次规划求解,看看计算的结果不会变为止(第二次规划求解时不需要再拷贝C4:C7的数据)。

(1)直线生成算法.doc

课程名称:计算机图形学指导教师:罗晓辉 上机实践名称:基本图形(直线)生成算法 年级:2008 姓名:孔广波 学号:312008********* 上机实践成绩: 上机实践日期:2011-4-10 实验一: 直线生成算法 上机实践报告 一、实验目的 理解直线生成的基本原理,掌握儿种常见的直线生成算法,利用Microsoft Visual C++6.0实现直线生成的DDA算法。 二、实验内容: 1)了解直线的生成原理。 2)掌握儿种基本的直线生成算法:DDA画线法、Bresenham画线法、中点画线法。 3)利用Microsoft Visual C++6.0实现直线生成的DDA算法,在屏幕上任意生成一条直线。 三、实验步骤: 1)预习教材关于直线的生成原理。 2)仿照教材关于直线生成的DDA算法,使用Microsoft Visual C++6.0实现该算法。 3)调试、编译、运行程序。 四、实验分析、源程序和结果: (1.1)中点算法分析: 中点画线算法原理示意图

直线斜率:k属于[0, 1] 线段的隐式方程:F(x,y) = ax + by + c = 0 ((x0 , y0), ( xl , yl )为两端点,式中a = yO - yl , b = xl - xO , c = xO * yl - xl * yO) 直线上方的点:F(x , y) > 0 直线下方的点:F ( x , y ) < 0 构造判别式:d = F(M) = F(Xp+l,Yp + 0.5) 由d>0, V0 可判定下一个象素,d 的初始值:d0 = F( X0 + 1 , Y0 + 0.5 ) = F( X0 , Y0 ) + a + 0.5b 因(X0, YO)在直线上,F(X0 , YO ) = 0,所以,dO = a + 0.5b (1.2)具体实现代码: void CGView::Line_DDA(long plxjong ply,long p2x,long p2y,CDC *pDC)〃画直线算法实现 ( int a,b,del 1 ,del2,d,x,y; b=p2x-plx; a=ply-p2y; d=2*a+b; dell=2*a; del2=2*(a+b); x=plx; y=piy; pDC->SetFixel(x,y,mJPenColor); while(xSetPixel(x,y-2,m_lPenColor); pDC->SetPixel(x,y-1 ,m_lPenColor); pDC->SetPixeI(x,y,m_lPenColor); pDC->SetPixel(x,y+1 ,m_IPenColor); pDC->SetPixel(x,y,m_lPenColor);

中点画椭圆法实验报告

一、实验目标 1.了解中点画椭圆法的基本思想; 2.掌握中点画椭圆法的基本步骤。 二、实验内容 本次实验要解决的问题主要是中点画椭圆法,椭圆中心不在原点及长轴和短轴任意长度的画椭圆问题。 原理简述:中点法依据椭圆斜率将第一像限的椭圆(b ≤a)分成两部分。根据 斜率变化确定步长方向:斜率绝对值小于1的区域1内x 方向取单位步长;斜率绝对值大于 1的区域2内y 方向取单位步长。 椭圆对称性质:椭圆分别关于X 轴、Y 轴对称。因此在计算椭圆生成的时候,只需要计算1/4个椭圆,经过对称原理就可以实现其他3/4个椭圆的生成了,即:计算出目标点(x,y )的坐标,必然存在(x,-y )、(-x,y )(-x,-y )。此方案中采用计算第一象限中椭圆的生成,即:计算x=0到y=0的1/4的椭圆。先通过平移的方法将假设椭圆中心在坐标原点,然后计算,最后再平移到真实中心位置。 三、实验步骤 一、打开cgdemoMFC 工程 1.打开Microsoft Visual Studio 2008 2.File-->Open-->cgdemo.sln 二、添加菜单 1.左侧视图栏中有三个视图:ClassView 、ResourceView 、FileView ,点击 ResourceView 2.展开cgdemo ,展开Menu ,双击IDR_MAINFRAME 第一象限椭圆区域划分 区域1:椭圆切线斜率小于1; 区域2:椭圆切线斜率大于1。

3.在右侧窗口菜单栏中找到“基本图形生成”菜单项,在该菜单项中添加“中点画圆法”,在“中点画圆法”属性框中找到ID框填:ID_LINE_ELLIPSE。 三、创建、编辑函数 1.打开cgdemoView.h头文件,在cgdemoView类枚举类型成员变量m_drawstyle中添加LINE_ELLIPSE。 2.给菜单项“中点画椭圆法”添加命令消息响应函数OnLineCircle()在该函数中添加以下程序代码。 void CcgdemoView::OnLineEllipse() { // TODO: Add your command handler code here m_drawstyle=LINE_ELLIPSE; Invalidate(true); } 3.在鼠标左键按下消息响应函数中添加当m_drawstyle为LINE_ELLIPSE时的情况,代码如下所示。 void CcgdemoView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default switch(m_drawstyle) { case LINE_DDA: case LINE_MIDPT: case LINE_ELLIPSE: } 4.在鼠标移动消息响应函数中添加m_drawstyle为LINE_CIRCLE时的情况,代码如下所示。 void CcgdemoView::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default switch(m_drawstyle) { case LINE_DDA: case LINE_MIDPT: case LINE_ELLIPSE: } 5.在cgdemoView.h头文件类中添加成员函数void MidpointEllipse(CDC* pDC, int x0,int y0,int x1, int y1,int color);并在cgdemoView.cpp源文件中void CcgdemoView::MidpointEllipseCDC* pDC,int x0,int y0,int x1,int y1,int color)为其 添加我们编写的中点画椭圆法代码;在中点画圆法中我们要计算两点之间的距离

椭圆离心率的三种求法中点弦方程三种求法

椭圆离心率的三种求法: (1)若给定椭圆的方程,则根据焦点位置确定a 2,b 2,求a ,c 的值,利用公式e =c a 或利用 22 1a b e -=直接求解. (2)求椭圆的离心率时,若不能直接求得c a 的值,通常由已知寻求a , b , c 的关系式,再与a 2 =b 2+c 2组成方程组,消去b 得只含a ,c 的方程,再化成关于e 的方程求解. (3)求离心率时要充分利用题设条件中的几何特征构建方程求解,从而达到简化运算的目的. 涉及椭圆离心率的范围问题要依据题设条件首先构建关于a ,b ,c 的不等式,消去b 后,转化为关于e 的不等式,从而求出e 的取值范围. 1. 若椭圆x 2a 2+y 2b 2=1(a >b >0)的左、右焦点分别为F 1,F 2,线段F 1F 2被点??? ??0,2b 分成5∶3 的两段,则此椭圆的离心率为( ) A.1617 B.41717 C.45 D.25 5 解析 依题意,得c +b 2c -b 2 =5 3,∴c =2b ,∴a = b 2+ c 2=5b ,∴e = 2b 5b =255. 答案D 点评 本题的解法是直接利用题目中的等量关系,列出条件求离心率. 2. 设P 是椭圆x 2a 2+y 2 b 2=1(a >b >0)上的一点,F 1,F 2是其左,右焦点.已知∠F 1PF 2=60°, 求椭圆离心率的取值范围. 分析 本题主要考查椭圆离心率取值范围的求法,建立不等关系是解答此类问题的关键. 解 方法一 根据椭圆的定义,有|PF 1|+|PF 2|=2a .① 在△F 1PF 2中,由余弦定理,得 cos 60°=|PF 1|2+|PF 2|2-|F 1F 2|22|PF 1||PF 2|=1 2, 即|PF 1|2+|PF 2|2-4c 2=|PF 1||PF 2|.② ①式平方,得|PF 1|2+|PF 2|2+2|PF 1||PF 2|=4a 2.③ 由②③,得|PF 1||PF 2|=4b 2 3 .④

OpenGL-实验2直线生成算法实现教学文案

实验2 直线生成算法实现 1.实验目的 理解基本图形元素光栅化的基本原理, 掌握一种基本图形元素光栅化算法, 利用0penGL 实现直线光栅化的DDA算法。 2.实验内容 (1)根据所给的直线光栅化的示范源程序, 在计算机上编译运行, 输出正确结果。 (2)指出示范程序采用的算法, 以此为基础将其改造为中点线算法或Bresenham算法,写 入实验报告。 (3)根据示范代码,将其改造为圆的光栅化算法,写入实验报告。 (4)了解和使用OpenGL的生成直线的命令,来验证程序运行结果。 3.实验原理 示范代码原理DDA算法。下面介绍OpenGL画线的一些基础知识和glutReshapeFunc()函数。 (1)数学上的直线没有宽度,但0penGL的直线则是有宽度的。同时, OpenGL的直线必须是有限长度,而不是像数学概念那样是无限的。可以认为, OpenGL的“直线”概念与数学上的“线段”接近,它可以由两个端点来确定。这里的线由一系列顶点顺次连接而成, 有闭合和不闭合两种。 前面的实验已经知道如何绘“点”,那么OpenGL是如何知道拿这些顶点来做什么呢? 是依次画出来,还是连成线? 或者构成一个多边形? 或是做其他事情? 为了解决这一问题, OpenGL要求:指定顶点的命令必须包含在glBegin函数之后, glEnd函数之前(否则指定的顶点将被忽略),并由glBegin来指明如何使用这些点。 例如: glBegin(GL P0INTS) , glVertex2f(0.0f, 0.0f); glVertex2f(0.5f, 0.0f); glEnd(); 则这两个点将分别被画出来。如果将GL_POINTS替换成GL_LINES,则两个点将被认为是直线的两个端点, OpenGL将会画出一条直线。还可以指定更多的顶点, 然后画出更复杂的图形。另一方面, glBegin支持的方式除了GL_POINTS和GL_LINES,还有GL LINE STRIP、GL LINE L0〇P、GL TRIANGLES、GL TRIANGLE STRIP、GL TRIANGLE_FAN等几何图元。 (2) 首次打开窗口、移动窗口和改变窗口大小时, 窗口系统都将发送一个事件, 以通知程序员。如果使用的是GLUT,通知将自动完成,并调用向glutReshapeFunc注册的函数。该函数必须完成下列工作: ①重新建立用作新渲染画布的矩形区域。 ②定义绘制物体时使用的坐标系。 如: void Reshape(int w, int h) { glViewport(0, 0, (GLsizei) w, (GLsizei) h);

直线和圆弧的生成算法

第3章直线和圆弧的生成算法 3.1直线图形的生成算法 数学上的直线是没有宽度、由无数个点构成的集合,显然,光栅显示器只能近地似显示直线。当我们对直线进行光栅化时,需要在显示器有限个像素中,确定最佳逼近该直线的一组像素,并且按扫描线顺序,对这些像素进行写操作,这个过程称为用显示器绘制直线或直线的扫描转换。 由于在一个图形中,可能包含成千上万条直线,所以要求绘制算法应尽可能地快。本节我们介绍一个像素宽直线绘制的三个常用算法:数值微分法(DDA)、中点画线法和Bresenham算法。 3.1.1逐点比较法 3.1.2数值微分(DDA)法 设过端点P0(x0 ,y0)、P1(x1 ,y1)的直线段为L(P0 ,P1),则直线段L的斜率 L的起点P 的横坐标x0向L的终点P1的横坐标x1步进,取步长=1(个像素),用L 的直线方程y=kx+b计算相应的y坐标,并取像素点(x,round(y))作为当前点的坐标。因为: y = kx i+1+b i+1 = k1x i+b+k x = y i+k x 所以,当x =1; y i+1 = y i+k。也就是说,当x每递增1,y递增k(即直线斜率)。根据这个原理,我们可以写出DDA(Digital Differential Analyzer)画线算法程序。

DDA画线算法程序: void DDALine(int x0,int y0,int x1,int y1,int color) { int x; float dx, dy, y, k; dx = x1-x0; dy=y1-y0; k=dy/dx,;y=y0; for (x=x0;x< x1;x++) { drawpixel (x, int(y+0.5), color); y=y+k; } } 注意:我们这里用整型变量color表示像素的颜色和灰度。 举例:用DDA方法扫描转换连接两点P0(0,0)和P1(5,2)的直线段。 x int(y+0.5) y+0.5 0 0 0 1 0 0.4+0.5 2 1 0.8+0.5 3 1 1.2+0.5 4 2 1.6+0.5 图3.1.1 直线段的扫描转换 注意:上述分析的算法仅适用于|k| ≤1的情形。在这种情况下,x每增加1,y最多增加1。当|k| 1时,必须把x,y地位互换,y每增加1,x相应增加1/k。在这个算法中,y与k必须用浮点数表示,而且每一步都要对y 进行四舍五入后取整,这使得它不利于硬件实现。

常见OTDR测试曲线解析80569

常见OTDR测试曲线解析 一、正常曲线 一般为正常曲线图, A 为盲区,B 为测试末端反射峰。测试曲线为倾斜的,随着距离的曾长,总损耗会越来越大。用总损耗( dB )除以总距离(Km)就是该段纤芯的平均损耗(dB/Km )。 二、光纤存在跳接点 中间多了一个反射峰,因为很有可能中间是一个跳接点,现城域网光缆中,比较常见。如:现主干光缆由汇接局至光缆交接箱,当有需求时,需由光交接箱布放光缆至用户端,光交接箱就需跳纤联接,所以在测试这样的纤芯时,就会出现像图

中这样的曲线图。当然也会有例外的情况,总之,能够出现反射峰,很多情况是因为末端的光纤端面是平整光滑的。端面越平整,反射峰越高。例如在一次中断割接当中,当光缆砍断以后,测试的曲线应该如光路存在断点图所示,但当你再测试时,在原来的断点位置出现反射峰的话,那说明现场的抢修人员很有可能已经把该纤芯的端面做好了。 三、异常情况 出现图中这种情况,有可能是仪表的尾纤没有插好,或者光脉冲根本打不出去,再有就是断点位置比较进,所使用的距离、脉冲设置又比较大,看起来就像光没有打出去一样。出现这种情况,1、要检查尾纤连接情况;2 、就是把OTD R的设置改一下,把距离、脉冲调到最小,如果还是这种情况的话,可以判断:1、尾纤有问题;2、OTDR 上的识配器问题;3、断点十分近,OTDR不足以测试出距离来。如果是尾纤问题,只要换一根尾纤就知道,不行的话就要试着擦洗识配器,或就近查看纤芯了。 四、非反射事件

1、这种情况比较多见,曲线中间出现一个明显的台阶,多数为该纤芯打折,弯曲过小,受到外界损伤等因素,多为故障点。 2、若光纤模式、折射率不一样,接续时也会出现此情况,常见光纤G651光纤(标准单模光纤,B1光缆),G653光纤(色散位移光纤,B2光缆)。造成这种现象的原因是由于接头两侧光纤的背向散射系数不一样,接头后光纤背向散射系数大于前段光纤背向散射系数,而从另一端测则情况正好相反,折射率不同也有可能产生增益现象。所以要想避免这种情况,只要用双向测试法就可以了。 五、光纤存在断点 这种情况一定要引起注意!曲线在末端没有任何反射峰就掉下去了,分析:1如果知道纤芯原来的距离,1、在没有到达

CG_实验2_基本图形元素(直线)生成算法的实现

实验二基本图形元素(直线)生成算法的实现 1.实验目的: 理解基本图形元素光栅化的基本原理,掌握一种基本图形元素光栅化算法,利用OpenGL实现直线光栅化的DDA算法。 2.实验内容: (1)根据所给的直线光栅化的示范源程序,在计算机上编译运行,输出正确结果; (2)指出示范程序采用的算法,以此为基础将其改造为中点线算法或Bresenham算法,写入实验报告; (3)根据示范代码,将其改造为圆的光栅化算法,写入实验报告; (4)了解和使用OpenGL的生成直线的命令,来验证程序运行结果。 3.实验原理: 示范代码原理参见教材直线光栅化一节中的DDA算法。下面介绍下OpenGL画线的一些基础知识和glutReshapeFunc()函数。

(1)数学上的直线没有宽度,但OpenGL的直线则是有宽度的。同时,OpenGL的直线必须是有限长度,而不是像数学概念那样是无限的。可以认为,OpenGL的“直线”概念与数学上的“线段”接近,它可以由两个端点来确定。这里的线由一系列顶点顺次连结而成,有闭合和不闭合两种。 前面的实验已经知道如何绘“点”,那么OpenGL是如何知道拿这些顶点来做什么呢?是一个一个的画出来,还是连成线?或者构成一个多边形?或是做其它事情呢?为了解决这一问题,OpenGL要求:指定顶点的命令必须包含在glBegin函数之后,glEnd函数之前(否则指定的顶点将被忽略),并由glBegin来指明如何使用这些点。 例如: glBegin(GL_POINTS); glVertex2f(0.0f, 0.0f); glVertex2f(0.5f, 0.0f); glEnd(); 则这两个点将分别被画出来。如果将GL_POINTS替换成GL_LINES,则两个点将被认为是直线的两个端点,OpenGL将会画出一条直线。还可以指定更多的顶点,然后画出更复杂的图形。另一方面,glBegin 支持的方式除了GL_POINTS和GL_LINES,还有GL_LINE_STRIP,GL_LINE_LOOP,GL_TRIANGLES,GL_TRIANGLE_STRIP,

炉温曲线测试规范

炉温曲线测试规范 1.目的 本规范规定了炉温曲线的测试周期、测试方法等,以通过定期的、正确的炉温曲线测试确定最佳的曲线参数,最终保证PCB装配的最佳、稳定的质量,提高生产效率和产品直通率。 2.定义 2.1回流曲线 在使用焊膏工艺方式中,通过固定在PCB表面的热电偶及数据采集器测试出PCB在回流焊炉中时间与温度的可视数据集合,根据焊膏供应商推荐的曲线,对不同产品通过适当调整温度设置及传输链的速度所得到的最佳的一组炉温设置参数。 2.2固化曲线 在使用点胶或印胶工艺方式中,通过固定在PCB表面的热电偶及数据采集器测试出PCB在固化炉中时间与温度的可视数据集合,根据焊膏供应商推荐的曲线,对不同产品通过适当调整温度设置及传输链的速度所得到的最佳的一组炉温设置参数。 2.3基本产品 指在一个产品系列中作为基本型的产品,该系列的其它产品都在此基础上进行贴装状态更改或对印制板进行少量的改版,一般情况下一个产品系列同一功能的印制板其图号仅在版本号上进行区分,如“***-1”与“***-2”或“***V1.1”与“***V1.2”等。 2.4派生产品 指由于设计贴装状态更改、或印制板在原有基础上进行少量的改版所生成的其所改动的CHIP 类器件数量未超过50只、同时没有对外形尺寸大于□20mm×20mm的IC器件(不包括BGA、CSP等特殊封装的器件)的数量进行调整的产品。 2.5全新产品 指产品公司全新开发、设计贴装状态更改或印制板在原有基础上改版时所生成的其所改动的CHIP类器件数量超过50只、或对外形尺寸大于□20mm×20mm的IC器件的数量进行调整的产品。凡状态更改中增加或减少了BGA、CSP等特殊封装的器件的产品均视为全新产品。 2.6测试样板 指用来测试炉温的实装板,该板必须贴装有与用来测试的生产状态基本一致的元器件。 3.职责 4.炉温测试管理 4.1炉温测试周期:原则上工程师根据当月所生产的产品应每月测试一次,将测试结果记录在“炉温参数设置登记表”上,并将炉温曲线打印存档。 4.2原则上全新产品必须经过炉温测试,确定准确的炉温设置参数,但对批量小于100套的全新工程师可以根据原有的相似产品根据观察实物的焊接效果进行自行调整。 4.3全新产品在炉温测试时应领取新的测试样板,派生产品可采用原基本产品的测试样板进行炉温测试,以针对不同的产品及状态设置相应准确的炉温参数。 5.测试准备 5.1炉温测试使用DataPaq炉温测试仪,热电偶使用K型。 5.2选择测温点。 热电偶应该安装在能代表PCB板上最热与最冷的连接点上(引脚到焊盘的连接点上),以及热敏感器件和其它高质量器件上,以保证其被足够地加热,一般测温点至少在三点及以上。测温点按以

直线、圆、椭圆的生成算法

计算机科学与技术学院 2012-2013学年第一学期《计算机图形学》实验报告 班级:100341C 学号:100341328 姓名:魏然 教师:惠康华 成绩:

实验项目:直线、圆、椭圆的生成算法 一、实验目的与要求 (1)了解Visual C++等编程环境中常用控件命令与绘图函数,初步掌握在实验设计集成环境(IDE)下进行图形处理程序的设计方法。 (2)熟练掌握直线的3种扫描转换算法:DDA算法,中点算法和Bresenham算法。 (3)掌握中点画圆算法、圆的Brensenham算法和椭圆的中点算法。 二、实验内容 (1)在Visual C++环境中设计MFC单文档程序,利用消息处理函数,搭建能运行图形算法程序的平台。(2)在平台中使用已有的点、线、圆等绘图函数,设计一个平面图形。Visual C++基本绘图函数可参考有关文献。 (3)根据教材中给定的算法,实现直线段的3种生成算法:DDA算法,中点法和Bresenham算法。(4)根据教材中给定的算法,实现圆与椭圆的生成算法。 三、重要算法分析 (一)、直线的生成 1、DDA算法 定义直线两端点和直线颜色:整型变量 x0=?, y0=?,x1=?,y1=?,c=颜色; 定义整型变量x,y,i;浮点数dx,dy,k; 根据数学算法得到斜率k, k=dy/dx,其中dx=(float)(x1-x0),dy=(float)(y1-y0); 定义x=x0;y=y0; 通过对x和y各增加一个小增量,计算下一步的x、y值。 当k的绝对值小于1的时候,标记一个像素点,像素点的坐标为(x,int(y+0.5),c),y=y+k,如果x=x i,则停止; 当k的绝对值大于或等于1的时候,标记一个像素点,像素点的坐标为(int(x+0.5),y,c),x=x+1/k,如果y=y i,则停止; 2、中点算法 定义直线两端点和直线颜色:整型变量 x0=?, y0=?,x1=?,y1=?,c=颜色; 定义浮点数:a,b,d1,d2,d,x,y;

相关主题
文本预览
相关文档 最新文档