[snap] grip 曲线

[复制链接]
梅雷工具箱发表于 2015-6-25 10:15:47 | 显示全部楼层 |阅读模式
线

entity/ln             $$ 实体变量定义
ln=line/0,0,0,0,0,10  $$ 创建线
halt                  $$ 停止

-----------------------------------------------------
$$ 过点d(3) 垂直线ln(1)
ln(2)=line/d(3),perpto,ln(1)

$$ 过点d(3) 垂直平面fa(1)
ln(3)=line/d(3),d(3),perpto,fa(1)

-----------------------------------------------------

$$ 确定两条直线的交点
$$ l3确定两条直线的交点如果不相交 点生在l1延长线
$$ l4确定两条直线的交点如果不相交 点生在l2延长线
entity/l1,l2,l3,l4


l3=point/intof,l1,l2,iferr,px:   
l4=point/intof,l2,l1,iferr,px:   
$$ 找不到焦点 说明 两条线平行
px:
halt

-----------------------------------------------------


$$ 注释

entity/c1,c2,l1
entity/p1,p2,p3,p4,p5,p6,p7,p8

c1=circle/center,(point/1,0,0),radius,1
c2=circle/center,(point/2,0,0),radius,1
l1=line/0,0,0,-1,0,0

p1=point/center,c1 $$ 取圆心
p2=point/ylarge,intof,c1,c2 $$ 取沿y方向最大的交点
p3=point/ysmall,intof,c1,c2 $$ 取沿y方向最小的交点
p4=point/(point/0,-1,0),intof,c1,c2 $$ 取离(point/0,-1,0)点最近的点
p5=point/p1,vect,(line/p2,p3),ylarge,2 $$ 使p1点沿着p2p3向量往y最大方向偏移2
p6=point/c1,atangl,45 $$ 取圆45度角点
p7=point/p1,delta,-2,-2,0 $$ 使p1点偏置(-2,-2,0)
p8=point/endof,xsmall,l1 $$ 取l1线的端点

halt $$ 结束语

-----------------------------------------------------
$ 注释

entity/c
entity/ln1,ln2,ln3,ln4,ln5,ln6,ln7

c=circle/center,(point/0,0,0),radius,1
ln1=line/0,0,0,1,0,0

$$ 最大方向平行 xlarge、ylarge、zlarge
$$ 最小方向平行 xsmall、ysmall、zsmall

ln2=line/parlel,ln1,ylarge,1           $$ 沿y最大方向平行于ln1线偏置1
ln3=line/parlel,ln1,ysmall,tanto,c     $$ 沿y最小方向平行于ln1和c圆相切
ln4=line/(point/0,0,0),atangl,45       $$ 过(0,0,0)画45度线
ln5=line/(point/2,0,0),right,tanto,c   $$ 过(2,0,0)切c圆(右手边)
ln6=line/(point/0,0,0),parlel,ln5      $$ 过(0,0,0)平行ln5线
ln7=line/(point/0,0,0),perpto,ln5      $$ 过(0,0,0)垂直ln5线

halt $$ 结束语

-----------------------------------------------------
$$ 注释

entity/c1,c2,c3,c4,c5,c6

c1=circle/center,(point/0,0,0),radius,1 $$ 过圆心和半径画圆
c2=circle/center,(point/0,0,0),tanto,(line/2,0,0,2,2,0),start,0,end,90 $$ 过圆心与线相切起始角终止角
c3=circle/center,(point/0,0,0),(point/3,0,0) $$ 过圆心和点
c4=circle/(point/4,0,0),(point/0,4,0),(point/-4,0,0) $$ 过三点画圆弧

halt $$ 结束语


-----------------------------------------------------

$$ 注释

$$实体变量和数字数组变量声明。
entity/ln1,ln2,pt1,pt2,pt3
number/a(3),b(3),c(3)

$$在ug窗口中选择第一条直线ln1。
l10:
ident/'pick  line 1',ln1,resp
jump/l10:,trm:,,resp

$$在ug窗口中选择第二条直线ln2。
l20:
ident/'pick  line 2',ln2,resp
jump/l20:,trm:,,resp

$$确定两条直线的交点pt1。
l30:
pt1=point/intof,ln1,ln2
a(1..3)=&point(pt1)
$$确定直线ln1的另一端点pt2。
b(1..3)=&spoint(ln1)
c(1..3)=&epoint(ln1)
ifthen/a(1)==c(1) and a(2)==c(2) and a(3)==c(3)
pt2=point/b(1..3)
elseif/a(1)==b(1) and a(2)==b(2) and a(3)==b(3)
pt2=point/c(1..3)
else
jump/trm:
endif
$$确定直线ln2的另一端点pt3。
b(1..3)=&spoint(ln2)
c(1..3)=&epoint(ln2)
ifthen/a(1)==c(1) and a(2)==c(2) and a(3)==c(3)
pt3=point/b(1..3)
elseif/a(1)==b(1) and a(2)==b(2) and a(3)==b(3)
pt3=point/c(1..3)
else
jump/trm:
endif
$$调用子程序'2-points-dis'分别计算点pt1和pt2距离dis1,pt1和pt3距离dis2以及pt2。
$$和pt3距离dis3
call/'2-points-dis',pt1,pt2,dis1   
call/'2-points-dis',pt1,pt3,dis2
call/'2-points-dis',pt3,pt2,dis3
$$利用dis1、dis2和dis3计算夹角的余弦值,从而确定两直线的角度。
arg=(dis1*dis1+dis2*dis2-dis3*dis3)/(2*dis1*dis2)
ang=acosf(arg)
delete/pt1,pt2,pt3
print/ang

trm:
halt



_____________________________________________________________________________ _

中磊UG二次开发教程 梅雷著 qq1821117007
学UG就上UG网 http://www.9sug.com/
就上UG网淘宝直营店
您需要登录后才可以回帖 登录 | 注册UG网 用百度帐号登录

本版积分规则