扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
用line命令!固定第一个座标位置,再用斜率计算第二点的座标位置!
创新互联公司为企业级客户提高一站式互联网+设计服务,主要包括成都网站建设、成都网站设计、手机APP定制开发、重庆小程序开发公司、宣传片制作、LOGO设计等,帮助客户快速提升营销能力和企业形象,创新互联各部门都有经验丰富的经验,可以确保每一个作品的质量和创作周期,同时每年都有很多新员工加入,为我们带来大量新的创意。
我来帮你好了,可以用VB编程来解决,至于专门的软件嘛,应该没有,这个功能只是一个小小的程序,我还没有发现有软件会实现这个功能
思路:
1、直线的斜率k可以求出
2、直线pq的斜率为直线斜率的倒数1/k
3、pq有点、有斜率,可以写出点斜式
4、求原直线与pq的交点(直线方程联立,即二元一次方程组)s
5、求出ps的横向或纵向距离,加倍,就是q
代码(文本框的名字分别为:x,y,a,b,c):
Private Sub Command1_Click()
If b = 0 Then
'竖线
label1= "Q(" -2 * c / a - x "," y ")"
ElseIf a = 0 Then
'横线
label1= "Q(" x "," -2 * c / b - y ")"
Else
'斜线
k = -a / b
b0 = -c / b
X1 = (y + x / k - b0) / (k + 1 / k) '垂足
Y1 = k * X1 + b0
label1= "Q(" 2 * X1 - x "," 2 * Y1 - y ")"
End If
End Sub
VB系统的坐标原点在左上角,X轴的正方向是水平向右,而Y轴的正方向是垂直向下。所以,要绘制三角函数的曲线,自己可以通过改变点坐标的方法来实现,当然,VB.NET提供了相应的方法可以来实现坐标变换,也可以通过VB.Net的Graphics类提供的平移、旋转等转换来实现。
下面是我通过自己变换实现的示例,提供参考;我的环境是VB.NET 2010
Imports System.Math
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'1,获得一个Graphics对象
Dim MyGraphics As Graphics
MyGraphics = PictureBox1.CreateGraphics
'2,定义一个Pen对象,用于绘制图形(轮廓线)
Dim MyPen As New Pen(Color.Black, 1)
'3,定义一个Brush对象,用于填充图形(如果需要填充的话)
Dim MyBrush As New SolidBrush(Color.Orange)
MyGraphics.DrawLine(MyPen, 0, 200, 700, 200)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'1,获得一个Graphics对象
Dim MyGraphics As Graphics
MyGraphics = PictureBox1.CreateGraphics
'2,定义一个Pen对象,用于绘制图形(轮廓线)
Dim MyPen As New Pen(Color.Black, 1)
'3,定义一个Brush对象,用于填充图形(如果需要填充的话)
Dim MyBrush As New SolidBrush(Color.Orange)
'声明横向和纵向比例变量
Dim Heng As Integer = 20
Dim Zong As Integer = 50
'先获得正弦值,保存到点坐标数组
Dim MyPoints(700) As Point
Dim i As Integer
For i = 0 To 700
MyPoints(i) = New Point(i * Heng, 200 + Sin(i) * Zong)
Next
'采用绘制光滑线连接点的方式绘制曲线
MyGraphics.DrawCurve(MyPen, MyPoints)
End Sub
End Class
显示的效果图:
知坐标(x0,y0)和斜率k
则有y0=kx0+b,= b=y0-kx0
所以 方程为 y=kx+(y0-kx0)
要在VB中画出方程图像来,就有点复杂了。以下是代码。部分代码参考网络。已经标注清楚
控件部分:三个文本,两个按键,一个picture,全部不改名。
文本1输入斜率,文本2输入X0,文本3输入Y0。按钮1作图。按钮2清空所作图形。保持坐标轴。如果对VB的坐标轴有疑问,请查阅百度或其它资料。
以下是全部代码:
Const Pi = 3.1415926535 '定义圆周率
Dim a, wor '定义用于在Picture1上的一个位置打印字符函数
Private Function PrintWord(x, y, Word As String)
With Picture1
.CurrentX = x
.CurrentY = y
.ForeColor = RGB(0, 0, 255)
End With
Picture1.Print Word
End Function
'以下坐标代码“借”自 《自己动手做一个数学函数作图器》
'出处:电脑爱好者 2004年02月14日 作者:陈新新 责任编辑:zwg
'
Private Function DrawDot(Px, Py, Color) '定义画点函数
Picture1.PSet (Px, Py), Color
End Function
Sub XY() '建立直角坐标系
Picture1.DrawWidth = 1 '设置线条宽度
Picture1.Cls '设定用户坐标系,坐标原点在Picture1中心
Picture1.Scale (-10, 10)-(10, -10)
Picture1.Line (-10, 0)-(10, 0), RGB(0, 0, 255)
Picture1.Line -(9.5, 0.5), RGB(0, 0, 255)
Picture1.Line (10, 0)-(9.5, -0.5), RGB(0, 0, 255)
Picture1.ForeColor = RGB(0, 0, 255)
Picture1.Print "X" '画 X 轴
Picture1.Line (0, -10)-(0, 10), RGB(0, 0, 255)
Picture1.Line -(0.5, 9.5), RGB(0, 0, 255)
Picture1.Line (0, 10)-(-0.5, 9.5), RGB(0, 0, 255)
Picture1.Print "Y" '画 Y 轴
For lin = -9 To 9
Picture1.Line (lin, 0)-(lin, 0.25)
wor = PrintWord(lin - 0.5, -0.5, Str(lin))
Picture1.Line (0, lin)-(-0.25, lin)
If lin 0 Then
wor = PrintWord(-0.9, lin, Str(lin))
End If
Next lin
Picture1.DrawWidth = 2
End Sub
Private Sub Command2_Click() '清空
XY
End Sub
Private Sub Form_Load()
Me.Show
Me.AutoRedraw = True
Picture1.BackColor = vbWhite
XY
End Sub
'以上代码摘自
Private Sub Form_Resize()
Picture1.Width = Me.Width * 0.9
Picture1.AutoRedraw = True
End Sub
Private Sub Command1_Click()
Dim x, y, x0, y0, k
Dim b
k = Val(Text1.Text)
y0 = Val(Text3.Text)
x0 = Val(Text2.Text)
b = y0 - k * x0
Dim fangq As String
fangq = "直线:y=" Str(k) "x"
If k = 0 Then fangq = "直线:y=" '对斜率为0的情况作出处理。
If b = 0 Then
fangq = fangq "+" Str(b)
Else
fangq = fangq Str(b)
End If
For x = -8 To 8 Step Pi / 6000 '作直线
Dot = DrawDot(x, k * x + b, RGB(255, 255, 0))
Next x
If Not k = 0 Then '输出名称
wor = PrintWord(-b / k - 2, 2, fangq)
Else
wor = PrintWord(5, b, fangq)
End If
End Sub
附运行图
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流