PCB论坛网

 找回密码
 注册
楼主: RichardLC

花焊盘的牛角尖(skill源码)

[复制链接]
发表于 2006-5-26 02:04:00 | 显示全部楼层
QUOTE:
以下是引用RichardLC在2006-5-25 20:32:00的发言:

这个值应该可以保证,为此我复习了NN年前学的三角函数(应该是初中的课程)[em01], 我倒是觉得这种圆滑的THERMAL的SPOKE如果用通常的值显得大了一点点,所以在我的实际程序中我还减了点ROUNDOFF的值(这个例子里没有写-通常在0.05mm)。

laikelang问的疑问多,但感觉没有仔细分析程序就在问呢,下次提问最好不用“好像”之类的话,直接提出来就行了,我是不怕砖拍的,嘿嘿)

[em04]我是分析过才有疑问的,嘿嘿,这段代码用于生成大量Thermal时效率不会比第一个代码快,因为axlPolyFromDB这个函数的效率比较低(这个是验证过的,我写过一段代码,就是用这个函数处理大量的数据,发现效率比较低,换了它之后效率提高了不少。),一般的Thermal开槽都是45度角的(至少我见过的都是),所以每生成一个Thermal都要使用四次axlPolyFromDB函数。[em06]

不能保证spoke的值,不是因为三角函数r=(od+id)/4 x=spoke/2+(od-id)/4 y=sqrt(r*r-x*x)的问题,其实可以发现瓣与瓣之间最小距离的两点并不在以 0:0为圆心,r为半径 的圆上,所以产生了误差。(描述的不太清楚,不知道可以理解不?)楼顶你发的图片中,左边圆滑的和右边平滑的spoke值应该是一样的吧?肉眼看上去就会发现,圆滑的Thermal最小通道会比平滑的小一些。([em04])

[此贴子已经被作者于2006-5-26 2:09:55编辑过]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-26 02:54:00 | 显示全部楼层
QUOTE:
以下是引用laikelang在2006-5-26 2:04:00的发言:

我是分析过才有疑问的,嘿嘿,这段代码用于生成大量Thermal时效率不会比第一个代码快,因为axlPolyFromDB这个函数的效率比较低(这个是验证过的,我写过一段代码,就是用这个函数处理大量的数据,发现效率比较低,换了它之后效率提高了不少。),一般的Thermal开槽都是45度角的(至少我见过的都是),所以每生成一个Thermal都要使用四次axlPolyFromDB函数。

不能保证spoke的值,不是因为三角函数r=(od+id)/4 x=spoke/2+(od-id)/4 y=sqrt(r*r-x*x)的问题,其实可以发现瓣与瓣之间最小距离的两点并不在以 0:0为圆心,r为半径 的圆上,所以产生了误差。(描述的不太清楚,不知道可以理解不?)楼顶你发的图片中,左边圆滑的和右边平滑的spoke值应该是一样的吧?肉眼看上去就会发现,圆滑的Thermal最小通道会比平滑的小一些。


哈哈,这样才好嘛,我来回应:

第一个我不知道axlPolyFromDB函数的效率究竟有多低,不过我不是在一个文件里生成所有花焊盘的,实际上对这种只有四个瓣的花盘永远只调用四次这个函数,其他大量的OR或AND逻辑函数并不见得比它快捷多少,当然这个我没有测试工具测试,我的话不能作数,如果有空的话你帮忙批量生成大批数据测试时间看看(磁盘访问的时间要除去哦)[em07],至于通常都是45度的情况,我改成默认就是45的就是了,这样连旋转操作都不用了,呵呵。

第二个砖头:哈哈,你的肉眼真厉害!我文中提到过在实际应用中我已经做了ROUNDOFF修正,如果按上面的代码的话(无修正)的是不会有误差的,你可以画画图看看,我这里贴出测试的结果:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

发表于 2006-5-26 09:48:00 | 显示全部楼层

把这个问题变成数学问题可能更好讨论些,附带一张图,画得有些乱,请指正
[em04][em04][em04]
回复 支持 反对

使用道具 举报

发表于 2006-5-26 09:55:00 | 显示全部楼层
laikelang 提到的现象正如 RichardLC 所说是不存在的
回复 支持 反对

使用道具 举报

发表于 2006-5-26 10:22:00 | 显示全部楼层
仔细分析你才会体验到 RichardLC 的学风。还是忍不住要赞 RichardLC ,哈哈,决无拍马屁之嫌,你的学风已经深深触动和影响了我,这比技术更可贵,能遇到你这样的良师益友真乃万幸图片点击可在新窗口打开查看图片点击可在新窗口打开查看图片点击可在新窗口打开查看
引用唐诗一首,细聆古训,以正吾学风。

师说



  ·(唐)韩愈·

  古之学者必有师。师者,所以传道受业解惑也。人非生而知之者,孰能无惑?惑而不从师,其为惑也,终不解矣。生乎吾前,其闻道也固先乎吾,吾从 而师之;生乎吾後,其闻道也亦先乎吾,吾从而师之。吾师道也,夫庸知其年之先後生於吾乎!是故无贵无贱无长无少,道之所存,师之所存也。嗟乎!师道之不传 也久矣,欲人之无惑也难矣。古之圣人,其出人也远矣,犹且从师而问焉;今之众人,其下圣人也亦远矣,而耻学於师。是故圣益圣,愚益愚。圣人之所以为圣,愚 人之所以为愚,其皆出於此乎?爱其子,择师而教之,於其身也,则耻师焉,惑焉。彼童子之师,授之书而习其句读者,非吾所谓传其道、解其惑者也。句读之不 知,惑之不解,或师焉,或不焉,小学而大遗,吾未见其明也。巫医、乐师、百工之人不耻相师,士大夫之族曰“师”曰“弟子”之云者,则群聚而笑之。问之,则 曰:彼与彼年相若也,道相似也,位卑则足羞,官盛则近谀。呜呼!师道之不复,可知矣。巫医、乐师、百工之人。吾子不齿,今其智乃反不能及,其可怪也欤!圣 人无常师。孔子师郯子、苌子、师襄、老聃。郯子之徒,其贤不及孔子。孔子曰:“三人行,必有我师。”是故弟子不必不如师,师不必贤於弟子。闻道有先後,术 业有专攻,如是而已。李氏子蟠,年十七,好古文、六艺,经传皆通习之,不拘於时,学於余。余嘉其能行古道,作师说以贻之。

[此贴子已经被作者于2006-5-26 10:50:15编辑过]
回复 支持 反对

使用道具 举报

发表于 2006-5-26 12:10:00 | 显示全部楼层

[em04][em04][em04]

理解了,呵呵,本人比较愚钝。我也改进了一下这个代码,支持开槽的任意数量,和开槽的任意角度。

QUOTE:
defun( _Create_Thermal ( od, id, spoke, n, ang)
prog(( PI, r, x, y, arc, slice, a, b, c, p)
  PI = 3.141593
  axlDBControl('activeLayer "etch/top")
  r = ( od + id)/4, x = ( od - id)/4 + spoke/2, y = sqrt( r*r - x*x )
  spoke = asin( x/r)*2, slice = 2*PI/n, arc = slice - spoke
  a = -x:y, b = _CTRotatePt( a, arc)
  if( ang != 0 then ang = ang*PI/180.0, a = _CTRotatePt( a, ang), b = _CTRotatePt( b, ang))
  for( i 1 n
       c = caar( axlDBCreatePath( axlPathArcCenter( axlPathStart( list( a)), ( od - id)/2, b, nil, 0:0)))
       p = axlPolyFromDB( c ?endCapType 'ROUND)
       axlDeleteObject( c)
       axlDBCreateShape( car( p) t)
       a = _CTRotatePt( a, slice), b = _CTRotatePt( b, slice)
    );end-for
);end-prog
);end-defun

QUOTE:

defun( _CTRotatePt ( pt, ang)
prog(( x, y, nx, ny)
  x = car( pt)
  y = cadr( pt)
  nx = x*cos( ang) - y*sin( ang)
  ny = x*sin( ang) + y*cos( ang)
  return( nx:ny) 
);end-prog
);end-defun


[此贴子已经被作者于2006-5-26 14:45:36编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

发表于 2006-5-26 15:57:00 | 显示全部楼层
[em06][em06][em06]还说自己愚钝。哈哈,收藏了[em31][em31][em31]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-27 08:32:00 | 显示全部楼层

哈哈,GFE2004对我的程序分析得很透彻,完后还吟古诗(我最怕文言文啦[em11]);而laikelang接到砖头后没躲避,反而把砖头炼得更结实、更ROBUST了。
对这个程序精简了一下(任意角度、任意数目SPOKE):玩家想用的拿去玩玩就是了。

QUOTE:

; neat smooth thermal (any angle and any number of spoke)
 spoke=0.4 od=1.8 id=1.5 n=5 angle=45.0 ;put these as your function's parameter
 defMathConstants(`m)
 r=(od+id)/4 y=spoke/2+(od-id)/4 x=sqrt(r*r-y*y) r1=(od-id)/2
 arc = (2*m.PI)/n - acos(x/r)*2
 nx=x*cos(arc)-y*sin(arc) ny=y*cos(arc)+x*sin(arc)
 for(i 1 n ;any spokes
   c=caar(axlDBCreatePath(axlPathArcCenter(axlPathStart(list(x:y)) r1 nx:ny nil 0:0)))
   axlTransformObject(c ?angle (i-1)*(360.0/n)+angle ?origin 0:0)
   axlDBCreateShape(car(axlPolyFromDB(c ?endCapType 'ROUND)) t)
   axlDeleteObject(c))
; coded since 2006-5-24: fpmontreal@gmail.com

BTW: 我没有用3.1415926535.....,用了数学常量defMathConstants(`m),这样我连“根号2”是多少都快忘啦[em01]。

回复 支持 反对

使用道具 举报

发表于 2006-5-27 18:59:00 | 显示全部楼层

说了这么多是怎么用呀?

回复 支持 反对

使用道具 举报

发表于 2006-6-2 14:29:00 | 显示全部楼层

请问一下各位:在普通的节能灯PCB里,焊盘与孔径大小的关系如何才是最佳?还有铜箔与铜箔之间的间距有没有标准?谢谢!

[em01]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|手机版|PCB设计论坛|EDA论坛|PCB论坛网 ( 沪ICP备05006956号-1 )

GMT+8, 2024-5-2 14:29 , Processed in 0.132028 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表