| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1539 人关注过本帖
标题:用VB画指定角度的直线的程序如何编写
只看楼主 加入收藏
justbeyondme
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-7-21
收藏
 问题点数:0 回复次数:10 
用VB画指定角度的直线的程序如何编写
诸位前辈,小弟想编一用VB画出指定角度的直线的编程程序,请大家赐教,小弟不尽感激!
搜索更多相关主题的帖子: 如何 
2013-07-21 22:44
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:0 
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是角邻边除对边。
收到的鲜花
  • justbeyondme2013-07-25 22:41 送鲜花  3朵   附言:好文章
2013-07-22 09:09
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
按照这这个角度,计算出一个 一元一次方程来。

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

代码不提供了。

授人于鱼,不如授人于渔
早已停用QQ了
2013-07-22 09:13
九连阳
Rank: 2
等 级:论坛游民
帖 子:36
专家分:65
注 册:2013-7-4
收藏
得分:0 
line(起点X,起点Y,起点X+线长*COS(直线弧度),起点Y+线长*SIN(直线弧度))
2013-07-22 18:40
justbeyondme
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-7-21
收藏
得分:0 
回复 2楼 lowxiong
斑竹,我是菜鸟,根据您的提示,代码还是没有编好,请再次赐教,谢谢!
2013-07-24 17:50
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:0 
根据九连阳的启示为你写的程序,效果图见下图(附做好的工程):
图片附件: 游客没有浏览图片的权限,请 登录注册

画指定角度直线.rar (2.22 KB)

代码如下:

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
收到的鲜花
  • justbeyondme2013-07-25 22:42 送鲜花  3朵   附言:原创内容
2013-07-24 18:59
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:0 
回复 6楼 lowxiong
其实我以前用的一个旋转图像就用到了这个算法,这个算法只能画圆上的点。我第一次给你提示的是从解析几何的角度画任意角度相交直线的。
2013-07-24 19:03
justbeyondme
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-7-21
收藏
得分:0 
回复 6楼 lowxiong
甚是感谢斑竹,好人一生平安!
2013-07-24 21:56
justbeyondme
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-7-21
收藏
得分:0 
斑竹,再向您请教一个问题,用VBA编程在CAD中画的直线,获取两端点的坐标值(startpoint,endpoint)用的是什么参数,是要获取具体的x,y,z值,比如说startpoint(0)=?、endpoint(2)=?还有一个问题,就是要旋转一条直线的话用的是什么参数,谢谢!

[ 本帖最后由 justbeyondme 于 2013-7-25 12:18 编辑 ]
2013-07-25 12:09
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:0 
没学过就没发言权。cad咱没接触过,不能给你什么解答,实在抱歉!
我给你的那个程序稍微改动下就可以动态旋转直线了。你只要定时在0-360之间增加text1的数,然后调用command1_click即可看到逆时针旋转效果。

[ 本帖最后由 lowxiong 于 2013-7-25 12:44 编辑 ]
2013-07-25 12:40
快速回复:用VB画指定角度的直线的程序如何编写
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031773 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved