vb怎么将多个点用光滑曲线连起来,并画出这条曲线的平均线

作者&投稿:弓伟 (若有异议请与网页底部的电邮联系)
vb怎么将多个点用光滑曲线连起来,并画出~

再光滑折线啊折线短点光滑
要弄类似条曲线算
看看

Option Explicit Dim Xi() As Single, Yi() As Single, u1(40000) As Single, v1(40000) As Single Dim a() As Single, b() As Single, c() As Single, dx() As Single, dy() As Single Dim qx() As Single, qy() As Single Dim num As Integer Dim ii As Long Const PP = 100Function hypot(ByVal X As Single, ByVal Y As Single) hypot = Sqr(X ^ 2 + Y ^ 2)End Function Sub tspLine(ByVal n As Integer, ByVal ch As Integer, ByVal tx1 As Single, ByVal tx2 As Single, ByVal ty1 As Single, ByVal ty2 As Single) Dim tt As Single, bx3 As Single, bx4 As Single, by3 As Single, by4 As Single Dim cx As Single, cy As Single, t(100) As Single, px(100) As Single, py(100) As Single Dim u(3) As Single, v(3) As Single, i As Integer num = 0 For i = 1 To n t(i) = hypot(Xi(i) - Xi(i - 1), Yi(i) - Yi(i - 1)) Next i Select Case ch Case 0 '抛物条件 u(0) = (Xi(1) - Xi(0)) / t(1): u(1) = (Xi(2) - Xi(1)) / t(2) u(2) = (u(1) - u(0)) / (t(2) + t(1)) tx1 = u(0) - u(2) * t(1) u(0) = (Yi(1) - Yi(0)) / t(1): u(1) = (Yi(2) - Yi(1)) / t(2) u(2) = (u(1) - u(0)) / (t(2) + t(1)) ty1 = u(0) - u(2) * t(1) u(0) = (Xi(n) - Xi(n - 1)) / t(n): u(1) = (Xi(n - 1) - Xi(n - 2)) / t(n - 1) u(2) = (u(0) - u(1)) / (t(n) + t(n - 1)) tx2 = u(0) + u(2) * t(n) u(0) = (Yi(n) - Yi(n - 1)) / t(n): u(1) = (Yi(n - 1) - Yi(n - 2)) / t(n - 1) u(2) = (u(0) - u(1)) / (t(n) + t(n - 1)) ty2 = u(0) + u(2) * t(n) Case 1 '夹持条件 a(0) = 1: c(0) = 0: dx(0) = tx1: dy(0) = ty1 a(n) = 1: b(n) = 0: dx(n) = tx2: dy(n) = ty2 Case 2 '自由条件 a(0) = 2: c(0) = 1 dx(0) = 3 * (Xi(1) - Xi(0)) / t(1): dy(0) = 3 * (Yi(1) - Yi(0)) / t(1) a(n) = 2: b(n) = 1 dx(n) = 3 * (Xi(n) - Xi(n - 1)) / t(n): dy(n) = 3 * (Yi(n) - Yi(n - 1)) / t(n) Case 3 '循环条件 a(0) = 2: c(0) = 1 dx(0) = 3 * (Xi(1) - Xi(0)) / t(1) - (t(1) * (Xi(2) - Xi(1)) / t(2) - Xi(1) + Xi(0)) / (t(1) + t(2)) dy(0) = 3 * (Yi(1) - Yi(0)) / t(1) - (t(1) * (Yi(2) - Yi(1)) / t(2) - Yi(1) + Yi(0)) / (t(1) + t(2)) a(n) = 2: b(n) = 1 dx(n) = 3 * (Xi(n) - Xi(n - 1)) / t(n) dx(n) = dx(n) + (Xi(n) - Xi(n - 1) - t(n) * (Xi(n - 1) - Xi(n - 2)) / t(n - 1)) / (t(n) + t(n - 1)) dy(n) = 3 * (Yi(n) - Yi(n - 1)) / t(n) dy(n) = dy(n) + (Yi(n) - Yi(n - 1) - t(n) * (Yi(n - 1) - Yi(n - 2)) / t(n - 1)) / (t(n) + t(n - 1)) End Select '计算方程组系数阵和常数阵 For i = 1 To n - 1 a(i) = 2 * (t(i) + t(i + 1)): b(i) = t(i + 1): c(i) = t(i) dx(i) = 3 * (t(i) * (Xi(i + 1) - Xi(i)) / t(i + 1) + t(i + 1) * (Xi(i) - Xi(i - 1)) / t(i)) dy(i) = 3 * (t(i) * (Yi(i + 1) - Yi(i)) / t(i + 1) + t(i + 1) * (Yi(i) - Yi(i - 1)) / t(i)) Next i '采用追赶法解方程组 c(0) = c(0) / a(0) For i = 1 To n - 1 a(i) = a(i) - b(i) * c(i - 1): c(i) = c(i) / a(i) Next i a(n) = a(n) - b(n) * c(i - 1) qx(0) = dx(0) / a(0): qy(0) = dy(0) / a(0) For i = 1 To n qx(i) = (dx(i) - b(i) * qx(i - 1)) / a(i) qy(i) = (dy(i) - b(i) * qy(i - 1)) / a(i) Next i px(n) = qx(n): py(n) = qy(n) For i = n - 1 To 0 Step -1 px(i) = qx(i) - c(i) * px(i + 1) py(i) = qy(i) - c(i) * py(i + 1) Next i '计算曲线上点的坐标 For i = 0 To n - 1 bx3 = (3 * (Xi(i + 1) - Xi(i)) / t(i + 1) - 2 * px(i) - px(i + 1)) / t(i + 1) bx4 = ((2 * (Xi(i) - Xi(i + 1)) / t(i + 1) + px(i) + px(i + 1)) / t(i + 1)) / t(i + 1) by3 = (3 * (Yi(i + 1) - Yi(i)) / t(i + 1) - 2 * py(i) - py(i + 1)) / t(i + 1) by4 = ((2 * (Yi(i) - Yi(i + 1)) / t(i + 1) + py(i) + py(i + 1)) / t(i + 1)) / t(i + 1) tt = 0 While (tt <= t(i + 1)) cx = Xi(i) + (px(i) + (bx3 + bx4 * tt) * tt) * tt cy = Yi(i) + (py(i) + (by3 + by4 * tt) * tt) * tt u1(num) = cx: v1(num) = cy: num = num + 1: tt = tt + 0.5 Wend u1(num) = Xi(i + 1): v1(num) = Yi(i + 1): num = num + 1 Next iEnd Sub Private Sub Form_Load() ReDim Xi(PP) ReDim Yi(PP) ReDim a(PP) ReDim b(PP) ReDim c(PP) ReDim dx(PP) ReDim dy(PP) ReDim qx(PP) ReDim qy(PP) Dim i As Long ii = 0 Picture1.Scale (-5, 450)-(16, 250) Xi(0) = 1 Yi(0) = 306 Xi(1) = 2 Yi(1) = 409 Xi(2) = 3 Yi(2) = 306 Xi(3) = 4 Yi(3) = 409 Xi(4) = 5 Yi(4) = 306 Xi(5) = 6 Yi(5) = 409 Xi(6) = 7 Yi(6) = 306 Xi(7) = 8 Yi(7) = 409 Xi(8) = 9 Yi(8) = 306 Xi(9) = 10 Yi(9) = 409 Xi(10) = 11 Yi(10) = 306 Xi(11) = 12 Yi(11) = 409 Xi(12) = 13 Yi(12) = 306 Xi(13) = 14 Yi(13) = 409 For i = 1 To 13 Load Shape1(i) Shape1(i).Visible = True Next Picture1.ForeColor = RGB(200, 200, 200) Picture1.Line (Picture1.ScaleLeft, 0)-(Picture1.ScaleLeft + Picture1.ScaleWidth, 0) Picture1.Line (0, Picture1.ScaleTop)-(0, Picture1.ScaleTop + Picture1.ScaleHeight) Picture1.ForeColor = RGB(255, 0, 0) For i = 0 To 13 Shape1(i).Left = Xi(i) - Shape1(i).Width / 2 Shape1(i).Top = Yi(i) + Shape1(i).Height / 2 Next i For i = 0 To 3 Picture1.PSet (Xi(i), Yi(i)) Next i tspLine 13, 2, 0, 0, 0, 0 Picture1.PSet (u1(0), v1(0)) For i = 1 To num - 1 Picture1.Line -(u1(i), v1(i)) Next iEnd Sub

用贝塞尔曲线画就可以了

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

我记得好像得用到Line这个控件
有个属性好像是控制Line曲度的

借助第三方组件很方便:Cairo


3个实际效果简介相机慢曝光B门的使用方法
环境光非常暗的场景。即使周围一点光没有也没关系。该怎么做?用三脚架将相机固定好,然后将相机调整至B门。调整一个合适的光圈,不要太小太小的话星轨会很细。之后进行B门曝光,如果想得到短一些的星轨可以曝光15分钟左右。如果要一个较为完整的周天运动可以曝光10几个小时。不过要注意的是,如果...

激光切割机怎么调光位
用透明胶纸贴在反射镜A的调光靶孔上,手动点动出光,微调反射镜A的底座及激光管支架,使光打在靶孔中心,注意光不能被挡;(2)第二道光的调整 将反射镜B移至远程,用张纸板由近至远出光,把光导进十字光靶里,因为远程光在靶里边则近端一定在靶里边,接着把近端和远程光斑调为一致,即近端怎...

河里A处有一石头,当站在河岸的B点时,看到的石头A‘点,试画出用激光手...
就是这样,要注意激光灯在水里的位置

请问下各位高手佳能单反相机的B门怎么使用
3.无线遥控使用法:将无线遥控器的接收器安装在单反相机上,把连接线插到相机快门插孔坐,要特别注意的是接收器与线遥控器四档频率要对好,接收器与线遥控器的二个红外线点置予正面,佳能官方提供无线遥控器型号:LC-5,遥控距离100米。使用B门办法和照相机的快门一样,按下无线遥控快门键打开B门,...

从A点(交换机)到B点(一台电脑)大约一千米,我用皮线光纤,请问我用几芯...
采用单模皮纤加一对收发器的方式为成本最少的方式,收发器有双芯和单芯两种,可任意选用,皮纤的芯数只需跟收发器的芯数相同即可,注意双芯收发器分为一收一发,本端收对应对端发,本端发对应对端收,单芯收发器收发都在同一芯上。收发器分别放置在A和B端,收发器出来的网线分别连接A交换机和B...

如图所示,小华同学用一只新买的激光笔照射水面,在竖直白墙上出现两个...
根据反射角等于入射角,则入射角也需增大,故使入射光线绕着O点沿顺时针方向转动.(2)由于入射光线不变,即入射角不变,则折射也不发生改变,因此过B′点做OB的平行线即为光点下移的折射光线,如图所示:显然入射光线不变,欲使B点下移至B′,水面需上升.故答案为:顺时针;上升.

火炬之光 V1.12B 汉化版怎么使用秘籍
skillpoints count 给你技能点 setpetlevel level(等级数值) 设置你宠物的等级 cameradistance mult 镜头锁定近距离,建议不要开,游戏会崩溃 skill name\/index(名字\/编号) 如果只打skill,就是显示技能列表,加上名字或者编号就是学会此技能 skilltest 技能测试,能让你使出其他职业的技能 item index,count...

苏州一光RTS 632B全站仪测点坐标怎么设置自动记录?
有个记录功能,点击再去文件管理列表里,这个系统比较麻烦的,DISP 是切换显示的,比如坐标,距离,角度 多摸索下

我想知道ps 菜单栏上的快键???
选取“文件”→“New”,点Photoshop菜单栏的Windows选项,在弹出菜单的最下面一栏点击已开启的图片名称,是的,就是这么简单! 22.在使用自由变换工具(Ctrl+T)时按住Alt键(Ctrl+Alt+T)即可先复制原图层(在当前的选区)后在复制层上进行变换;Ctrl+Shift+T为再次执行上次的变换,Ctrl+Alt+Shift+T为复制原图后再执行...

...质点P从A点释放后,沿什么样的轨迹运动使其到达B点所需时间最短_百度...
那么,如何选择时间最短路径呢?光在界面上的传播速度是V1 = c\/n1 界面下是V2 = c\/n2 假设入射角为a,折射角为b,显然满足 h1*tana + h2 tanb = L 并且我们要求的是 t = (h1\/cosa)\/V1 + (h2\/cosb)\/V2 的最小值。这里我们为了化简简便,不使用h1h2 而是使用L被O点分成的两部分x...

上饶县13752373981: 用vb怎么能把两点用光滑的曲线连接起来 -
僪尚姜枣: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929...

上饶县13752373981: VB能否将很多个点连成线,不用折线,想用比较光滑的曲线 -
僪尚姜枣: 再光滑也是折线啊,折线短点就光滑了 如果要弄类似样条曲线的话,有算法 你可以看看这个 http://hi.baidu.com/vbplusplus/blog/item/1491ea1fc66227f6e0fe0baa.html

上饶县13752373981: vb中怎样描点,然后再将点直接用线连起来 -
僪尚姜枣: 描点:Circle (x, y), r 画线:line(x1,y1)-(x2,y2) 请看看这里有资料:VB制作折线统计图[张志晨] http://hi.baidu.com/xlzzc/blog/item/e3c48200ccca45147aec2c24.html

上饶县13752373981: 有x的40个数据,y的40个数据,如何用VB的picturebox把这些散点作图到x - o - y坐标系,并用平滑曲线连起来?
僪尚姜枣: 如果不能用api,就动态生成line控件来连接两个点之间的数据. 如果可以用LineTo这个API函数

上饶县13752373981: 在vb上怎么根据多个点画出一条曲线 -
僪尚姜枣: 严格来说你这个是折线.如果要求精度不高,只要24个点的话,就求出每两个点之间的距离,把23个段加起来就是长度了; 如果要求比较高,求需要先拟合你的曲线,然后用微分,积分求解.

上饶县13752373981: 在VB中怎么把数据散点连成圆滑曲线? -
僪尚姜枣: 网上有专门的 圆形按钮的控件下载 下载个使用起来方便.

上饶县13752373981: 请问下怎样将许多点连成一段过度光滑曲线? -
僪尚姜枣: 具体操作如下:将这些点用多段线依次连接——修改——对象——多段线——单击多段线——选择拟合即可,此种方法还可以生成样条曲线.记得秒秒学上就有详细介绍,你可以百度搜搜去里面学下,挺实用的.

上饶县13752373981: vb中teechart.series如何设置光滑曲线(line)
僪尚姜枣: 线型在extended选项下选bezier,试试看.

上饶县13752373981: 有什么方法可以将许多点连成一段过度光滑曲线需用多段线? -
僪尚姜枣: 将这些点用多线依次连接——修改——对象——多段线——单击多段线——选择拟合即可(用此种方法还可以生成样条曲线).这是我从秒秒学看来的~

上饶县13752373981: 用vb如何画曲线?谢谢. -
僪尚姜枣: Private Sub Form_Paint() Dim xt As Integer For i = 0 To 5000 PSet (i, 1200), vbRed '在对像的指定位置(x,y),按确定的像素颜色画点 Next i For xt = 0 To 5000 PSet (xt, 300 * Cos(xt * 3.1415926 / 1800) + 600 * Sin(3 * xt * 3.1415926 / 1800) + 1200), vbBlue Next xt Print Tab(17); "数学曲线" End Sub

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网