直线1 Pt1,Pt2
Pt1(0)=0 : Pt1(1) =0
Pt2(0)=10 : Pt2(1) =10直线2 pPt1,pPt2
pPt1(0)=0 : pPt1(1) =0
Pt2(0)=5 : Pt2(1) =5
------------------------
两条直线的Delta相等→两条直线平行比较容易实现。
(pt2(1)-pt1(1))/(pt2(0)-pt1(0))=(pPt2(1)-pPt1(1))/(pPt2(0)-pPt1(0))
当pPt1(0)=pPt2(0) : pPt1(1)=pPt2(1)→两条直线重合。
请各位大侠帮助的,当直线2
pPt1(0)=1 : pPt1(1) =1
Pt2(0)=5 : Pt2(1) =5如何用VB来判断直线1和直线2重合。谢谢。
Pt1(0)=0 : Pt1(1) =0
Pt2(0)=10 : Pt2(1) =10直线2 pPt1,pPt2
pPt1(0)=0 : pPt1(1) =0
Pt2(0)=5 : Pt2(1) =5
------------------------
两条直线的Delta相等→两条直线平行比较容易实现。
(pt2(1)-pt1(1))/(pt2(0)-pt1(0))=(pPt2(1)-pPt1(1))/(pPt2(0)-pPt1(0))
当pPt1(0)=pPt2(0) : pPt1(1)=pPt2(1)→两条直线重合。
请各位大侠帮助的,当直线2
pPt1(0)=1 : pPt1(1) =1
Pt2(0)=5 : Pt2(1) =5如何用VB来判断直线1和直线2重合。谢谢。
解决方案 »
- 如何让DataGrid中的某一行显示在视窗的第一行
- listview 控件的BUG??
- 请教datagrid控件的初级问题
- 哪为大哥,高手帮忙啊~~~来者有分,分不够再加
- 如何将一个字符串转化为对应的二进制?急!!!!!!!!!!!!!
- Access 中的查询语句
- 连按两下ctrl呼出界面,这个怎么写
- 我想问下计算机业专的高手~~我想学计算机方面的知识,不知道从那入手了,该学些什么?请教高手。(在给我说下计算机业专分为那几大类?)
- 大家帮帮忙!帮我想一下!100分相送,绝不失言!
- 关于快捷键(Hotkey)的问题,为何在一些游戏中不起作用?135分送上。
- 帮帮我看看,老说编译错误,我不知道哪里错
- 想在ID列内按顺序填入1、2、3。。。,但为什么指示Adodc1.Recordset.MoveNext键列不足或不正确。更新影响多行。谢谢
a为斜率, b就是Y0
1、k相等
2、b相等
x As Long
y As Long
End Type
这样来表示一个点好一些,谁知道楼主的数值哪个是X哪个是Y
x→pt(0)
y→pt(1)
------------
看来还是没有表述清楚。直线1 Pt1,Pt2
Pt1(0)=0 : Pt1(1) =0
Pt2(0)=10 : Pt2(1) =10直线2 pPt1,pPt2
pPt1(0)=0 : pPt1(1) =0
Pt2(0)=5 : Pt2(1) =5两直线重合,但长度不相等,且直线1和直线2重合时,其起点和终点均不在相同点上。
因此
pPt1(0)=pPt2(0) and Pt1(1)=Pt2(1)or pPt1(0)=pPt2(1) and Pt1(1)=Pt2(0)
只是直线1和直线2重合的一个特例。
-----------------------
直线的方程:y=k*x+b 两条直线要重合,必须满足:
1、k相等
2、b相等
----------------------------
k值没有什么可讨论的。
现在的关键点是b
谢谢各位的回复。
----------------
问题提出的出发点
----------------
在AutoCAD用Line绘图时,两条线重合是最普遍的现象。
例如:用Line命令绘两条直线,结果肯定是重合的。
直线1 Pt1,Pt2
Pt1(0)=0 : Pt1(1) =0
Pt2(0)=10 : Pt2(1) =10直线2 pPt1,pPt2
pPt1(0)=0 : pPt1(1) =0
Pt2(0)=5 : Pt2(1) =5Line重合在AutoCad相当多,由于对绘图没有什么影响,所以很少有人关注。
----------------------
近期在网上,以直线重合为关键字找了一下,发现两条直线重合是一种算法。
所以,以此为题请教各位大侠。
在这个帖子中。
vbman2003网友这段程序,需要进一步消化理解。GetPoint = COLINE '重合MsgBox Choose(n + 1, "相交", "重合", "平行")Option ExplicitPrivate Type Point
X As Double
Y As Double
End TypePrivate Type Lines
P1 As Point
P2 As Point
End TypeConst CROSS As Long = 0 '两直线相交
Const COLINE As Long = 1 '两直线重合
Const PARALLEL As Long = 2 '两直线平行'判断与计算交点
Private Function GetPoint(L1 As Lines, L2 As Lines, P As Point) As Long
Dim A1 As Double, B1 As Double, C1 As Double
Dim A2 As Double, B2 As Double, C2 As Double
Dim D As Double, R As Double
A1 = L1.P2.Y - L1.P1.Y
B1 = L1.P1.X - L1.P2.X
C1 = L1.P2.X * L1.P1.Y - L1.P1.X * L1.P2.Y
A2 = L2.P2.Y - L2.P1.Y
B2 = L2.P1.X - L2.P2.X
C2 = L2.P2.X * L2.P1.Y - L2.P1.X * L2.P2.Y D = A1 * B2 - A2 * B1
If D = 0 Then
If (B1 * C2 <> B2 * C1) Or (A1 * C2 <> A2 * C1) Then
GetPoint = PARALLEL '平行
Else
GetPoint = COLINE '重合
End If
Else
'返回交点
P.X = (A1 * C2 - A2 * C1) / D
P.Y = (C1 * B2 - C2 * B1) / D
Print P.X; P.Y
GetPoint = CROSS '相交
End If
End FunctionPrivate Function GetLine( _
ByVal X1 As Double, _
ByVal Y1 As Double, _
ByVal X2 As Double, _
ByVal Y2 As Double _
) As Lines
Dim L As Lines
With L
.P1.X = X1
.P1.Y = Y1
.P2.X = X2
.P2.Y = Y2
Line (.P1.X, .P1.Y)-(.P2.X, .P2.Y)
End With
GetLine = L
End Function'测试:
Private Sub Command1_Click()
Dim L1 As Lines, L2 As Lines
Dim P As Point
Dim n As Long
Me.Scale (-50, 30)-(50, -30)
Me.Cls
L1 = GetLine(-20, 20, 40, -40)
L2 = GetLine(-10, 10, 20, -20)
n = GetPoint(L1, L2, P)
MsgBox Choose(n + 1, "相交", "重合", "平行")
Me.Cls
L1 = GetLine(-10, 10, 20, -30)
L2 = GetLine(-10, 10, 20, -20)
n = GetPoint(L1, L2, P)
MsgBox Choose(n + 1, "相交", "重合", "平行")
Me.Cls
L1 = GetLine(-10, 20, 20, -10)
L2 = GetLine(-10, 10, 20, -20)
n = GetPoint(L1, L2, P)
MsgBox Choose(n + 1, "相交", "重合", "平行")
End Sub