如何判断曲线与直线相交,怎么求出交点
高手进来看一下,如果CAD的dwg图形上有一个曲线,在边上任取一点,往曲线上画,可以有一个交点,如果用VBA编程的话,可以选定一个曲线,再选定一个点,那么,如何判断该点可以以一个角度作的直线与曲线相交呢,交点坐标如何求呢,高手在的话,回一下贴啊,看看有没有什么好的算法,或者一些具体的函数,求助!!!!!!!!!!!!!!!! http://www.mccad.net/object/acad2004/idh_intersectwith.htm <P>你这个方法我在AUTOCAD帮助中的开发文档里找到了,里面有个例子,是画线,画圆,然后求交点, 我复制过去,运行出现了错误,代码如下:</P><P><BR>Public Sub CommandButton1_Click()<BR>UserForm1.Hide<BR>Dim lineObj As AcadLine<BR> Dim startPt(0 To 2) As Double<BR> Dim endPt(0 To 2) As Double<BR> startPt(0) = 1: startPt(1) = 1: startPt(2) = 0<BR> endPt(0) = 5: endPt(1) = 5: endPt(2) = 0<BR> Set lineObj = ThisDrawing.ModelSpace.AddLine(startPt, endPt)<BR> UserForm1.Show<BR>End Sub</P>
<P>Public Sub CommandButton2_Click()<BR>UserForm1.Hide<BR>Dim circleObj As AcadCircle<BR> Dim centerPt(0 To 2) As Double<BR> Dim radius As Double<BR> centerPt(0) = 3: centerPt(1) = 3: centerPt(2) = 0<BR> radius = 1<BR> Set circleObj = ThisDrawing.ModelSpace.AddCircle(centerPt, radius)<BR> ZoomAll<BR>UserForm1.Show</P>
<P>End Sub</P>
<P>Public Sub CommandButton3_Click()<BR>UserForm1.Hide<BR>Dim intPoints As Variant<BR>Set intPoints = lineObj.IntersectWith(circleObj, acExtendNone)<BR> <BR> ' Print all the intersection points<BR> Dim I As Integer, j As Integer, k As Integer<BR> Dim str As String<BR> If VarType(intPoints) <> vbEmpty Then<BR> For I = LBound(intPoints) To UBound(intPoints)<BR> str = "Intersection Point[" & k & "] is: " & intPoints(j) & "," & intPoints(j + 1) & "," & intPoints(j + 2)<BR> MsgBox str, , "IntersectWith Example"<BR> str = ""<BR> I = I + 2<BR> j = j + 3<BR> k = k + 1<BR> Next<BR> End If<BR>UserForm1.Show</P>
<P>End Sub<BR>提示错误如下:运行错误‘424’</P>
<P>在Set intPoints = lineObj.IntersectWith(circleObj, acExtendNone)行上标示错误,</P>
<P>版主帮忙看一下,怎么回事</P> intPoints = lineObj.IntersectWith(circleObj, acExtendNone) <P>现在又有一个新问题,想问一下,我是做了一个循环,先画线,选取一个曲线,然后求交点,删除原来的直线,重新画线,以原起点为起点,交点为端点,结果出错,程序如下:</P>
<P>Private Sub CommandButton1_Click()<BR>Dim angle As Double<BR>Dim p1 As Variant<BR>Dim p2(0 To 2) As Double<BR>Dim lineobj As AcadLine<BR>Dim lineobj2 As AcadLine<BR>Dim curveobj As AcadObject<BR>Dim intersectpoint As Variant '定义交点<BR>Dim temppt(0 To 2) As Double<BR>UserForm1.hide<BR>p1 = ThisDrawing.Utility.GetPoint(, "选取坝体上某一点")<BR>ThisDrawing.Utility.GetEntity curveobj, pickedpoint, "请选定曲线"<BR>For angle = 180 To 360 Step 5<BR>p2(0) = p1(0) + 100 * Cos(angle) '计算初始直线另一端点<BR>p2(1) = p1(1) + 100 * Sin(angle)<BR>p2(2) = p1(2)<BR>Set lineobj = ThisDrawing.ModelSpace.AddLine(p1, p2)<BR>intersectpoint = lineobj.IntersectWith(curveobj, acExtendthisEntity) '得到交点<BR>temppt(0) = intersectpoint(0)<BR>temppt(1) = intersectpoint(1)<BR>temppt(2) = 0<BR>lineobj.Delete<BR>Set lineobj = ThisDrawing.ModelSpace.AddLine(p1, temppt) '重新画线</P>
<P>lineobj.color = Int(255 * Rnd + 1)<BR>lineobj.Highlight True<BR>lineobj.Update</P>
<P>Next angle</P>
<P>UserForm1.Show</P>
<P>End Sub</P>
<P>结果:temp(0)=intersectpoint(0)上提示下标越界</P>
<P>问一下,怎么回事,应该怎么解决</P> <P>实体间没有交点时,IntersectWith函数返回上界为-3的数组,会出现这种情况,要先判断一下</P> <P>谢谢,回答,再问一个问题,如果在直线上选定一个点,能不能在选定点的同时,返回直线上的标注,同时如果有一个曲线与直线上标注的数字一样的话,选择该曲线,</P>
<P>版主提示一下,用什么方法,,</P>
<P>谢谢啦,听他们说好像不能,不知道你有没有什么高招,</P>
页:
[1]