乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 65|回复: 4

[求助]VBA求两条相交直线内切圆的切点?

[复制链接]

57

主题

127

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
355
发表于 2007-4-18 10:00:00 | 显示全部楼层 |阅读模式
各位大侠:
      已知两条相交直线的三个点P1,P2,P3,已知内切圆的半径R1,请问如何求出t1和t2两个切点的位置?

32qp5pd0lc5.jpg

32qp5pd0lc5.jpg

回复

使用道具 举报

17

主题

68

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
136
发表于 2007-4-20 18:42:00 | 显示全部楼层
如下图,用解析法可求的要求的点t1, t2的坐标

fvllzbuwiqi.gif

fvllzbuwiqi.gif


回复

使用道具 举报

57

主题

127

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
355
发表于 2007-4-21 10:13:00 | 显示全部楼层

多谢楼上的大侠,您的图我看得不是很明白,我贴出自己勉强写出来的程序,运行结果基本达到要求,但t2处有一点问题,圆弧与t2p2直线的切点处总是无法正确连接好,有0.0000017间隙,但p3t1与t1处的切点却没有问题,百思不得其解,请各位帮忙看一看程序到底哪有问题,先谢谢了!
Private Sub Fil()
Dim Tmp As Variant
Dim p1(0 To 2) As Double
Dim p2(0 To 2) As Double
Dim p3(0 To 2) As Double
Dim pc(0 To 2) As Double
Dim t1(0 To 2) As Double
Dim t2(0 To 2) As Double
Dim Angp1p2Radian As Double
Dim Angp1p3Radian As Double
Dim Angpct1Radian As Double
Dim Angpct2Radian As Double
Dim AngJJ1 As Double
Dim AngJJ2 As Double
Dim Dstp1pc As Double
Dim Dstp1t1 As Double
Dim Dstp1t2 As Double

p1(0) = 5#: p1(1) = 45#: p1(2) = 0#
p2(0) = 50#: p2(1) = 50#: p2(2) = 0#
p3(0) = 0#: p3(1) = 0#: p3(2) = 0#
'p1到p2的角度
Angp1p2Radian = ThisDrawing.Utility.AngleFromXAxis(p1, p2)
'p1到p3的角度
Angp1p3Radian = ThisDrawing.Utility.AngleFromXAxis(p1, p3)
'算出P2P1P3的角度的一半
AngJJ1 = ((3.1415926 * 2 - Angp1p3Radian + Angp1p2Radian) / 2)
Dstp1pc = 1 / Sin(AngJJ1) * dRadius
Dstp1t1 = Cos(AngJJ1) * Dstp1pc
Dstp1t2 = Dstp1t1
AngJJ2 = Angp1p3Radian + AngJJ1
Tmp = ThisDrawing.Utility.PolarPoint(p1, AngJJ2, Dstp1pc)
pc(0) = Tmp(0)
pc(1) = Tmp(1)
pc(2) = Tmp(2)
Tmp = ThisDrawing.Utility.PolarPoint(p1, Angp1p3Radian, Dstp1t1)
t1(0) = Tmp(0)
t1(1) = Tmp(1)
t1(2) = Tmp(2)
Tmp = ThisDrawing.Utility.PolarPoint(p1, Angp1p2Radian, Dstp1t2)
t2(0) = Tmp(0)
t2(1) = Tmp(1)
t2(2) = Tmp(2)
Angpct1Radian = ThisDrawing.Utility.AngleFromXAxis(pc, t1)
Angpct2Radian = ThisDrawing.Utility.AngleFromXAxis(pc, t2)
Call ThisDrawing.ModelSpace.AddLine(p2, t2)
Call ThisDrawing.ModelSpace.AddArc(pc, dRadius, Angpct2Radian, Angpct1Radian)
Call ThisDrawing.ModelSpace.AddLine(p3, t1)
End Sub

zaxpvewddyc.jpg

zaxpvewddyc.jpg


请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:dpj2lubk20e.dvb 
下载次数:0  文件大小:80 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]

回复

使用道具 举报

57

主题

127

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
355
发表于 2007-4-28 14:43:00 | 显示全部楼层
没有哪位兄长帮一帮小弟吗?
回复

使用道具 举报

0

主题

4

帖子

2

银币

初来乍到

Rank: 1

铜币
4
发表于 2011-10-28 15:49:00 | 显示全部楼层
我试过了 是PI的问题  取PI=3.1415927 就没问题了
AngJJ1 = ((3.1415927 * 2 - Angp1p3Radian + Angp1p2Radian) / 2.0)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-6-30 17:36 , Processed in 0.836887 second(s), 79 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表