十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
电脑屏幕是由许多点组成的,所以在屏幕上直接画出的直线,除了完全水平或垂直的是真正的直线外,其他都肯定是边缘带锯齿形状的。要消除这种锯齿状,就要在线段边缘设置一些过渡色,使线段看起来平滑一些(但这仍然不是真正的直线),而这显然已经超出了VB本身的能力范围了,采用其他第三方控件或API的话,代码会复杂很多。如果你只是想自己编程玩玩的,就这样将就将就了,别要求太高。如果你想做出有实用价值的作品,就要用真正的图片来做表盘和指针,而不要用VB本身的绘图命令。
创新互联公司专业为企业提供同仁网站建设、同仁做网站、同仁网站设计、同仁网站制作等企业网站建设、网页设计与制作、同仁企业网站模板建站服务,十余年同仁做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
最后再说一次:至少在目前的硬件技术条件下,在电脑屏幕上除了完全水平或垂直的直线,你是无法画出你想象中的那种完全平滑的直线的,不管用什么软件和技术(包括楼上说的gdi+);另外,屏幕的点及点距越小,画出的直线也就越接近平滑,比如你这个图如果是画在800*480以上分辨率的手机屏幕上,你会发现情况会大大改观!
要使用点画线,而不是line来画线。这样的曲线就会很圆滑了;
点的使用是Pset函数
绘图是系统内部操作的,不需要懂原理
方法就在那里,只有会用和不会用,你的代码告诉它绘制,它就会绘制。它(方法)究竟如何去绘制的并不是重点,反正它会绘制。
drawline(绘线)方法很简单,第一个参数是pen,它确定线条的颜色、宽度和样式。第二、第三个参数都是point类型,确定两个点的位置,绘制直线。
先分析你的曲线特征,然后选择合适的函数进行拟合。
实现曲线拟合的方法大致可以分为两大类:
1.插值法,给定一组精确的离散数据点,构造一个函数,使其严格依次通过每个数据点,满足光滑的要求。常用的而又多项式插值,抛物样条曲线和三次样条曲线等。
2.逼近法,给定一组具有误差的离散数据点,构造一个函数,使其整体上接近这些数据点,而不必点点通过他们。常用的逼近法有最小二乘法,B样条曲线等
看你的曲线要求选择,找到合适的函数曲线自然就光滑了
用贝塞尔曲线画就可以了
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function PolyBezierTo Lib "gdi32.dll " (ByVal hdc As Long, lppt As POINTAPI, ByVal cCount As Long) As Long
Private Sub Form_Paint()
Dim pts(0 To 6) As POINTAPI
'set the coördinates
pts(0).x = 22: pts(0).y = 33
pts(1).x = 66: pts(1).y = 55
pts(2).x = 177: pts(2).y = 88
pts(3).x = 199: pts(3).y = 111
pts(4).x = 299: pts(4).y = 222
pts(5).x = 80: pts(5).y = 333
PolyBezierTo Me.hdc, pts(0), 6
End Sub
平均线 ??是个什么线????求出平均值后话直线吗?
那就lineto好了
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function PolyBezierTo Lib "gdi32.dll " (ByVal hdc As Long, lppt As POINTAPI, ByVal cCount As Long) As Long
Private Sub Form_Paint()
Dim pts(0 To 6) As POINTAPI
Dim pt(0 To 6) As POINTAPI
'set the co?rdinates
pts(0).x = 22: pts(0).y = 33
pts(1).x = 66: pts(1).y = 55
pts(2).x = 177: pts(2).y = 88
pts(3).x = 199: pts(3).y = 111
pts(4).x = 299: pts(4).y = 222
pts(5).x = 80: pts(5).y = 333
For n = 1 To 6
pt(n).x = (pts(n).x + pts(n - 1).x) / 2
pt(n).y = (pts(n).y + pts(n - 1).y) / 2
Next n
PolyBezierTo Me.hdc, pt(0), 6
PolyBezierTo Me.hdc, pts(0), 6
End Sub