蘋多利亚 2021-07-03 21:15 采纳率: 0%
浏览 47

vb6.0怎么在picturebox中连接三个点绘制弧线

前提:使用scale在picturebox中绘制一个坐标轴
问题:1)绘制点时,点坐标能否用val(text1.text)表示
2)如果1)成立,如何绘制圆弧,并且连接三个点(三点分别为:弧线的起始点、中点、终结点)

以下是我的代码

Private Sub Command3_Click()
Picture1.Cls
Picture1.ScaleMode = 3 '像素
Picture1.Scale (0, 0)-(103, 103) '定义左上角座标为(0,0),右下角座标为(103,103)
Picture1.DrawWidth = 1 '设置绘线宽度
Picture1.Line (0, 50)-(100, 50), vbBlack ' 绘坐标横线
Picture1.Line (50, 0)-(50, 100), vbBlack ' 绘坐标纵线
' 指定位置显示测设参考图
Picture1.CurrentX = 0
Picture1.CurrentY = 0
Picture1.Print "测设参考图"
'指定位置显示原点O
Picture1.CurrentX = 50
Picture1.CurrentY = 50
Picture1.Print "O"
' 指定位置显示-1Ok
Picture1.CurrentX = 0
Picture1.CurrentY = 50
Picture1.Print "-10k"
' 指定位置显示-8k
Picture1.CurrentX = 10
Picture1.CurrentY = 50
Picture1.Print "-8k"
' 指定位置显示-6k
Picture1.CurrentX = 20
Picture1.CurrentY = 50
Picture1.Print "-6k"
' 指定位置显示-4k
Picture1.CurrentX = 30
Picture1.CurrentY = 50
Picture1.Print "-4k"
' 指定位置显示-2k
Picture1.CurrentX = 40
Picture1.CurrentY = 50
Picture1.Print "-2k"
' 指定位置显示2k
Picture1.CurrentX = 60
Picture1.CurrentY = 50
Picture1.Print "2k"
' 指定位置显示4k
Picture1.CurrentX = 70
Picture1.CurrentY = 50
Picture1.Print "4k"
' 指定位置显示6k
Picture1.CurrentX = 80
Picture1.CurrentY = 50
Picture1.Print "6k"
' 指定位置显示8k
Picture1.CurrentX = 90
Picture1.CurrentY = 50
Picture1.Print "8k"
' 指定位置显示10k
Picture1.CurrentX = 100
Picture1.CurrentY = 50
Picture1.Print "10k"
'指定位置显示-10k
Picture1.CurrentX = 50
Picture1.CurrentY = 0
Picture1.Print "-10k"
' 指定位置显示-8k
Picture1.CurrentX = 50
Picture1.CurrentY = 10
Picture1.Print "-8k"
' 指定位置显示-6k
Picture1.CurrentX = 50
Picture1.CurrentY = 20
Picture1.Print "-6k"
' 指定位置显示-4k
Picture1.CurrentX = 50
Picture1.CurrentY = 30
Picture1.Print "-4k"
' 指定位置显示-2k
Picture1.CurrentX = 50
Picture1.CurrentY = 40
Picture1.Print "-2k"
' 指定位置显示2k
Picture1.CurrentX = 50
Picture1.CurrentY = 60
Picture1.Print "2k"
' 指定位置显示4k
Picture1.CurrentX = 50
Picture1.CurrentY = 70
Picture1.Print "4k"
' 指定位置显示6k
Picture1.CurrentX = 50
Picture1.CurrentY = 80
Picture1.Print "6k"
' 指定位置显示8k
Picture1.CurrentX = 50
Picture1.CurrentY = 90
Picture1.Print "8k"
' 指定位置显示10k
Picture1.CurrentX = 50
Picture1.CurrentY = 100
Picture1.Print "10k"
End Sub

img

  • 写回答

1条回答 默认 最新

  • 码农阿豪 Java领域优质创作者 2024-02-22 16:19
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如需一对一服务私聊我哦
    1)可以使用val来将text1.text转换为数字类型的坐标。例如,要在坐标系中绘制一个坐标为(x,y)的点,可以使用以下代码:
    x = Val(Text1.Text)
    y = Val(Text2.Text)
    Picture1.Circle (x, y), 3, vbRed
    

    这段代码会在坐标系中以红色绘制一个半径为3像素的圆点,其坐标为(text1.text,text2.text)。 2)要画一条连接三个点的圆弧,可以使用Picture1.Line方法结合Picture1.DrawArc方法。根据三点坐标计算圆心、半径和起始角度、结束角度,然后调用DrawArc方法画出圆弧,最后用Line方法将三个点相连即可。以下是示例代码:

    ' 假设三点坐标为(x1, y1), (x2, y2), (x3, y3)
    ' 计算圆心坐标和半径
    a = x1 - x2
    b = y1 - y2
    c = x3 - x2
    d = y3 - y2
    e = a * (x1 + x2) + b * (y1 + y2)
    f = c * (x2 + x3) + d * (y2 + y3)
    g = 2 * (a * (y3 - y2) - b * (x3 - x2))
    If g = 0 Then Exit Sub ' 三点共线,不画圆弧
    x = (d * e - b * f) / g
    y = (a * f - c * e) / g
    r = Sqr((x1 - x) ^ 2 + (y1 - y) ^ 2)
    ' 计算起始角度和结束角度
    startAngle = Atn2(y1 - y, x1 - x)
    endAngle = Atn2(y3 - y, x3 - x)
    ' 计算绘制圆弧的矩形区域
    x1 = x - r
    y1 = y - r
    x2 = x + r
    y2 = y + r
    ' 画出圆弧和相连线段
    Picture1.DrawArc (x1, y1)-(x2, y2), startAngle, endAngle - startAngle
    Picture1.Line (x1, y1)-(x2, y2), vbBlue
    Picture1.Line (x1, y)-(x3, y), vbBlue
    

    这段代码会在坐标系中画出一个连接三个点的圆弧,并将圆弧和三个点用蓝色线段相连。注意,如果三个点共线,那么计算圆心和半径会失败,这时需要退出子程序,不进行圆弧的绘制。

    评论

报告相同问题?

悬赏问题

  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)