高分请教如何在图片框中画出一个角度并计算出角度。

yh1205 2004-03-30 05:42:27
如题,请高手帮帮忙:)分不够偶再添,谢谢了!
有源码最好了!
...全文
225 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiqunet 2004-04-05
  • 打赏
  • 举报
回复
'班门弄斧,试一下,不行别怪,呵呵

'新建一个窗体,将下面代码贴入,在窗体内放入三个Label,点击并移动鼠标即可从窗体和label中看到夹角并计算大小

Dim Xo(1) As Single, Yo(1) As Single, K(1) As Single, A(1) As Single
Dim DrawN As Integer

Private Sub Form_Load()
Me.AutoRedraw = True
Me.Scale (-1000, 1000)-(1000, -1000) '定义坐标系统为:窗口的左上角坐标是(-1000,1000),右下角坐标是(1000,-1000),原点在窗口的中心;亦即是常用的平面直角坐标系形式
DrawN = 0 '标志量初始化
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If DrawN = 3 Then DrawN = 0 '当第四次点下鼠标时,标志量复位
If DrawN < 2 Then '根据标志量给各初始量取值
Xo(DrawN) = X
Yo(DrawN) = Y
End If
DrawN = DrawN + 1 '标志量自增
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If DrawN = 2 Then
Me.Cls '清除屏幕以便生成新的夹角
Me.Line (Xo(0), Yo(0))-(X, Y) '画第一条直线
Me.Line (Xo(1), Yo(1))-(X, Y) '画第二条直线,生成夹角

If Xo(0) = X Then '如果直线两个端点的横坐标是一样的,它与横坐标的夹角就是90度
A(0) = 90
Else
A(0) = 180 * Atn((Yo(0) - Y) / (Xo(0) - X)) / 3.14 '算出直线的斜率,并转换为角度
End If
If A(0) < 0 Then A(0) = 180 + A(0) '如果得到的角度为负值,就将其转换为钝角
'第二条直线的处理方法同第一条直线
If Xo(1) = X Then
A(1) = 90
Else
A(1) = 180 * Atn((Yo(1) - Y) / (Xo(1) - X)) / 3.14
End If
If A(1) < 0 Then A(1) = 180 + A(1)

Label1 = "第一条直线与横轴的夹角是:" & A(0)
Label2 = "第二条直线与横轴的夹角是:" & A(1)

'分两种情况计算两直线的夹角
If (Y > Yo(0) And Y < Yo(1)) Or (Y < Yo(0) And Y > Yo(1)) Then
Label3 = "两直线的夹角是:" & 180 - Abs(A(1) - A(0))
Else
Label3 = "两直线的夹角是:" & Abs(A(1) - A(0))
End If
End If
End Sub

northwolves 2004-03-31
  • 打赏
  • 举报
回复
Private Sub Form_Click()
Picture1.Cls
Randomize
Dim alpha As Double
alpha = Atn(1) * 8 * Rnd ' an angle between 0 to 2pi
Picture1.Scale (-1, 1)-(1, -1)
Picture1.Line (0, 0)-(1, 0), vbRed
Picture1.Line (0, 0)-(Cos(alpha), Sin(alpha) - 0), vbBlue
MsgBox Format(alpha * 45 / Atn(1), "0.00") & "°" ' angle from redline to blueline
End Sub

Private Sub Form_Load()
Me.Move Screen.Width / 2 - 3000, Screen.Height / 2 - 3000, 6000, 6000
Picture1.Move 0, 0, 5000, 5000
End Sub
jnhjone 2004-03-31
  • 打赏
  • 举报
回复
OK
happywqw 2004-03-31
  • 打赏
  • 举报
回复
严重同意!~:)

不过要提醒的是通常情况下如果是你自己画的两条线,可能会交叉对吧?这时候就得考虑交点的问题,或者有可能不相交,但延长后会相交!(这些都可以通过几何方法解决)

还有就是容器的坐标系要确定好,最好是表示为我们通常使用的坐标系先!(可以参考Scale属性设置)
liyan010 2004-03-31
  • 打赏
  • 举报
回复
就是就是,太简单了!

你根据你的一个角度∠的三个点,可以算出三角形的三个边长,然后根据余弦定理a^2=b^2+c^2-2*b*c*cosA就很容易算出∠A的大小了。
yh1205 2004-03-31
  • 打赏
  • 举报
回复
我先试试去
lsftest 2004-03-30
  • 打赏
  • 举报
回复
可以根据画的两条线的端点坐标
(x0,y0),(x1,y1)
(x2,y2),(x3,y3)
求出角度,详细请参阅解释几何教程。
脆皮大雪糕 2004-03-30
  • 打赏
  • 举报
回复
首先,可以肯定,你的这个角是由两条直线构成的。两条直线的斜率我想我就不用说了吧。

两条直线相交构成四个角,它们是两对对顶角,其中较小的一对角α称为直线的夹角,那么tanα = abs((k2-k1)/(1+k1*k2))。

写个函数就出来了
啊维 2004-03-30
  • 打赏
  • 举报
回复
这,没搞过,好像有点难
sjtuyjc 2004-03-30
  • 打赏
  • 举报
回复
什么意思呀?

不太清楚。

7,763

社区成员

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

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