注册 登录
编程论坛 VB6论坛

用VB画指定角度的直线的程序如何编写

justbeyondme 发布于 2013-07-21 22:44, 1567 次点击
诸位前辈,小弟想编一用VB画出指定角度的直线的编程程序,请大家赐教,小弟不尽感激!
10 回复
#2
lowxiong2013-07-22 09:09
1、直线方程为y=ax+b,a为斜率,是tan(A)的值,A即为直线与x轴夹角
2、两条直线夹角可以换算为他们与直线夹角的差,即A1-A2
3、反之,已知一直线方程为y=a1x+b,求另一与该直线夹角为A的直线方程,并根据直线方程画直线,则A1=atn(a1),A2=A1+A,因此a2=tan(A1+A)=tan(atn(a1)+A),所以另一直线方程为y=tan(atn(a1)+A)x+b
4、编写一个根据直线方程画直线的函数就可以了。
5、tan在vb里是正切函数,atn是反正切(是不是也叫余切),角度全部转换为弧度,即(角度*π/180)。复习下三角函数:sin是角对边除斜边,cos是角邻边除斜边,tan是角对边除邻边,atn是角邻边除对边。
#3
风吹过b2013-07-22 09:13
按照这这个角度,计算出一个 一元一次方程来。

然后按照这个方程,把你区域里 X 值为最大和最小时,Y 计算的结果,形成二个坐标,然后这二个坐标之间画直线就是了。

代码不提供了。
#4
九连阳2013-07-22 18:40
line(起点X,起点Y,起点X+线长*COS(直线弧度),起点Y+线长*SIN(直线弧度))
#5
justbeyondme2013-07-24 17:50
回复 2楼 lowxiong
斑竹,我是菜鸟,根据您的提示,代码还是没有编好,请再次赐教,谢谢!
#6
lowxiong2013-07-24 18:59
根据九连阳的启示为你写的程序,效果图见下图(附做好的工程):
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

代码如下:

Private Type PointApi
  x As Long
  y As Long
End Type
Dim oXY As PointApi, rndXY As PointApi  '定义原点坐标和随机点坐标形成原始直线

Private Function getNewZb(jiao As Long, oldZb As PointApi, xyo As PointApi) As PointApi
  '根据圆点坐标、圆上一点坐标、圆半径求转过一个角度jiao后的坐标
  Dim x As Single, y As Single, h As Single
  h = jiao * 3.1415926 / 180 '把角度换算为弧度
  x = (oldZb.x - xyo.x) * Cos(h) + (oldZb.y - xyo.y) * Sin(h) + xyo.x
  y = (oldZb.y - xyo.y) * Cos(h) + xyo.y - (oldZb.x - xyo.x) * Sin(h)
  '记住上述两个算法,复习复习下三角函数就知道为什么这样算了。
  getNewZb.x = x
  getNewZb.y = y
End Function

Private Sub Command1_Click()
  Dim nXY As PointApi
  Me.Cls
  Me.Line (oXY.x, oXY.y)-(rndXY.x, rndXY.y), vbBlue  '用蓝色画参考直线
  nXY = getNewZb(Val(Text1), rndXY, oXY)
  Me.Line (oXY.x, oXY.y)-(nXY.x, nXY.y), vbRed '用红色画指定角度直线
End Sub

Private Sub Form_Load()
  Dim l As Long
  oXY.x = Me.Width * 0.5
  oXY.y = Me.Height * 0.5    '坐标原点位于窗体中间
  Randomize
  l = Me.Height * 0.25
  If Me.Width < Me.Height Then l = Me.Width * 0.3
  l = l + Rnd * l '产生一个随机数作为另一点的x坐标
  rndXY.x = l + oXY.x
  rndXY.y = oXY.y  '首先虚拟一个直线,该直线是平行于x轴的
  Randomize
  l = 360 * Rnd '产生一个随机角度
  rndXY = getNewZb(l, rndXY, oXY)  '根据虚拟直线和随机角度获取实际的随机参考直线坐标
  Me.Line (oXY.x, oXY.y)-(rndXY.x, rndXY.y), vbBlue  '用蓝色画参考直线
End Sub
#7
lowxiong2013-07-24 19:03
回复 6楼 lowxiong
其实我以前用的一个旋转图像就用到了这个算法,这个算法只能画圆上的点。我第一次给你提示的是从解析几何的角度画任意角度相交直线的。
#8
justbeyondme2013-07-24 21:56
回复 6楼 lowxiong
甚是感谢斑竹,好人一生平安!
#9
justbeyondme2013-07-25 12:09
斑竹,再向您请教一个问题,用VBA编程在CAD中画的直线,获取两端点的坐标值(startpoint,endpoint)用的是什么参数,是要获取具体的x,y,z值,比如说startpoint(0)=?、endpoint(2)=?还有一个问题,就是要旋转一条直线的话用的是什么参数,谢谢!

[ 本帖最后由 justbeyondme 于 2013-7-25 12:18 编辑 ]
#10
lowxiong2013-07-25 12:40
没学过就没发言权。cad咱没接触过,不能给你什么解答,实在抱歉!
我给你的那个程序稍微改动下就可以动态旋转直线了。你只要定时在0-360之间增加text1的数,然后调用command1_click即可看到逆时针旋转效果。

[ 本帖最后由 lowxiong 于 2013-7-25 12:44 编辑 ]
#11
justbeyondme2013-07-25 13:06
回复 10楼 lowxiong
你给我的那个程序我已经改成画直线的了, 很是感谢斑竹!
1