判断曲线是否相交

huangyubinde 2008-08-05 02:50:05
VB如何判断曲线是否相交?
...全文
1139 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxxssww1986 2010-10-21
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 tiger_zhao 的回复:]

如果曲线非常随意,那么:
用单独的颜色画出曲线A,然后将所有被曲线A分割的区域填充上不同的颜色;
然后只要逐个判断曲线B上的点位置,对应的颜色值是否一致,只要不一致就是两曲线有重合或相交。
[/Quote]

楼上能否贴一个实例的程序出来么?现在也遇到关于两条随意曲线的相交问题。
Tiger_Zhao 2008-08-20
  • 打赏
  • 举报
回复 1
如果曲线非常随意,那么:
单独的颜色画出曲线A,然后将所有被曲线A分割的区域填充上不同的颜色;
然后只要逐个判断曲线B上的点位置,对应的颜色值是否一致,只要不一致就是两曲线有重合或相交。
用户 昵称 2008-08-19
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 huangyubinde 的回复:]
现在是有两条随机生成的曲线,有可能相交,也有可能不相交. 目的是判断这两条随机生成的线是否存在交点. 而不是楼上所认为的两条线
延长到什么点时会出现相交点.
[/Quote]

用计算机解决数学问题,一般就两种方法,

第一,用纯数学的方法,手工求出公式,让计算机只进行计算,那样是否有交点,什么地方是交点肯定是对的。
第二个就是利用穷举,这种方法必须给出实际的区间。
huangyubinde 2008-08-09
  • 打赏
  • 举报
回复
fvflove,谢谢你的帮忙,但是你已经误解我的意思了.
fvflove 2008-08-09
  • 打赏
  • 举报
回复
接上:


'计算交点坐标
Dim CX As Double
Dim CY As Double
If Line1.A = Line2.A Then
MsgBox "两条平行线,不可能相交"
Else
CX = (Line2.B - Line1.B) / (Line1.A - Line2.A)
CY = Line1.A * CX + Line1.B

MsgBox "交点X坐标为:" & CX
MsgBox "交点Y坐标为:" & CY

'判断交点的X坐标是否在 L1.X1与 L1.X2之间.(起始点与终止点)
'判断交点的X坐标是否在 L2.X1与 L2.X2之间就知道是否相交了.
if CX>=L1.X1 and Cx<=L1.X2 then
if Cx>=L2.X1 and Cx<=L2.X2 then
'这样条线,可以看到交点,不用延伸
else
'这样条线,不可以看到交点,L2线要进行延伸
end if
end if
End If


huangyubinde 2008-08-09
  • 打赏
  • 举报
回复
现在是有两条随机生成的曲线,有可能相交,也有可能不相交. 目的是判断这两条随机生成的线是否存在交点. 而不是楼上所认为的两条线
延长到什么点时会出现相交点.
fvflove 2008-08-09
  • 打赏
  • 举报
回复


'以下代码是求两条直线的交点的.
'直线的线方程为 A*X+B=Y
'你可以按照我下成的理论计算两条曲线的交点.
'曲线方程一般是(不能引申到全部.但一般都有方程式:如圆的是 X^2+Y^2=R^2):A*X^2+B*X+C=Y

Option Explicit
Private Type LineFunction
A As Double
B As Double
End Type


Private Line1 As LineFunction
Private Line2 As LineFunction

'设定窗体中有二条直线 L1 与 L2 .请用Line控件

Private Sub Command1_Click()
'先求出两条直线的方程
Line1.A = (L1.Y1 - L1.Y2) / (L1.X1 - L1.X2)
Line1.B = L1.Y1 - Line1.A * L1.X1

Line2.A = (L2.Y1 - L2.Y2) / (L2.X1 - L2.X2)
Line2.B = L2.Y1 - Line2.A * L2.X1

'计算交点坐标
Dim CX As Double
Dim CY As Double
If Line1.A = Line2.A Then
MsgBox "两条平行线,不可能相交"
Else
CX = (Line2.B - Line1.B) / (Line1.A - Line2.A)
CY = Line1.A * CX + Line1.B

MsgBox "交点X坐标为:" & CX
MsgBox "交点Y坐标为:" & CY
End If
End Sub
huangyubinde 2008-08-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jennyvenus 的回复:]

这里有一个例子,俺运行过这个例子,感觉很实际

http://topic.csdn.net/t/20021018/16/1107401.html
[/Quote]

这个例只能判断一个点在不在一条线上,现在是判断二条线是否相交,问题是这两条线中不知道在哪个点会相交.是随机的
用户 昵称 2008-08-07
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 lan563 的回复:]
就两个方程~~初中的知识
[/Quote]
解析几何用计算机做起来就很麻烦的。不信你算一下与三个已知圆都相切的圆。
zzyong00 2008-08-07
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 lan563 的回复:]
就两个方程~~初中的知识
[/Quote]
别想的哪么简单,你解解共轭方程
lan563 2008-08-07
  • 打赏
  • 举报
回复
就两个方程~~初中的知识
_l_ 2008-08-06
  • 打赏
  • 举报
回复
要是你的曲线的来源是数据的话

那直接比较下数据

如股票的均线 我们一般就是用比较数字来 算出是否相交的
用户 昵称 2008-08-06
  • 打赏
  • 举报
回复
这个问题可以这样做简单一点,用特定颜色画曲线1,然后沿曲线2用小步长检测,遇到那个特定颜色就认为相交了,关键是如何决定区间以及如何节省时间。
fvflove 2008-08-06
  • 打赏
  • 举报
回复
就算你随机生面的曲线,也可以求出曲线函数

三点确认一条曲线:

A*X1^2+B*X1+C=Y1
A*X2^2+B*X2+C=Y2
A*X3^2+B*X3+C=Y3

已知三点的X,Y 可以求出A B C
那此曲线的方程式就是:
A*X^2+B*X+C=Y
jhone99 2008-08-06
  • 打赏
  • 举报
回复
怎么随机生成的?
zzyong00 2008-08-06
  • 打赏
  • 举报
回复
这恐怕要具体问题具体分析了,看是什么样的两条曲线了
huangyubinde 2008-08-06
  • 打赏
  • 举报
回复
是两条随机生成的曲线,没什么函数
啊的发哦 2008-08-06
  • 打赏
  • 举报
回复
看见数字就头疼,路过!
用户 昵称 2008-08-06
  • 打赏
  • 举报
回复

这里有一个例子,俺运行过这个例子,感觉很实际

http://topic.csdn.net/t/20021018/16/1107401.html
Tiger_Zhao 2008-08-06
  • 打赏
  • 举报
回复
如果你的曲线是两条类似示波器曲线(就是某个x只能有一个y值),很简单:
将两条曲线的y值分别放在两个数组A()、B()中,保证它们相同下标表示的是相同的x坐标。
(假定数组起始下标为1),求 C=Sgn(A(1)-B(1)),这个 C 表示两条曲线的上下关系,如果 C=0,那么在起点正好相交。
否则循环求 Ci=Sgn(A(i)-B(i)) i=[2..n],只要 Ci<>C,那么就相交。
如果全部 Ci=C,那么不相交。
加载更多回复(4)

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧