田草博客

互联网田草博客


网友交流QQ群:11740834 需注明申请加入原因

微信 公众号:ByCAD

邮箱:tiancao1001x126.com
ByCAD,微信公众号
首页 | 普通 | 电脑 | AutoCAD | VB/VB.NET | FLash | 结构 | 建筑 | 电影 | BIM | 规范 | 软件 | ID
-随机-|-分布-
-博客论坛-|-﨣﨤﨧﨨-
-网站导航-|-规范下载-
-BelovedFLash欣赏-

用户登陆
用户:
密码:
 

站点日历
73 2025 - 3 48
      1
2345678
9101112131415
16171819202122
23242526272829
3031


站点统计

最新评论



点集的边界 根据ip显示天气预报
未知 CAD VBA 也能画出这样的样条曲线spirograph万花尺螺旋曲线   [ 日期:2008-07-17 ]   [ 来自:本站原创 ]  HTML
按此在新窗口打开图片
 




按此在新窗口打开图片
按此在新窗口打开图片
按此在新窗口打开图片
按此在新窗口打开图片
按此在新窗口打开图片 



[本日志由 tiancao1001 于 2024-12-28 08:34 PM 编辑]


引用这个评论 night1001 于 2011-06-04 01:17 PM 发表评论: 
代码中缺少 point3D()的源码吧~

引用这个评论 tiancao1001 于 2008-10-13 02:55 PM 发表评论: 
Private Sub CommandButton2_Click()
    Dim i As Long
    Dim N As Integer
    Dim Pi As Double
    Pi = 4# * Atn(1#)
    Dim R As Long
    Randomize
    R = Int(Rnd * 100)
    Dim R1 As Long
    R1 = (0.5 - Rnd) * 199
    Dim L As Long
    L = Int(Rnd * 100)
    Dim S As Long
    S = Int(Rnd * 50)
    Dim m As Long
    m = Int(Rnd * 100)
    Dim A1 As Double
    Dim A2 As Double
    Dim P(2) As Double
    Dim P0(2) As Double
    Dim X As Double
    Dim Y As Double
    
    Dim Fit() As Double
    Dim Sp As AcadSpline
    
    ReDim Fit(2)
    
    i = i + 1
    A1 = i * Pi / 180
    A2 = (R1 / R) * A1
    
    X = (-(R1 - R) * Cos(A1) - S * Cos(A2 - A1) + 100) * m
    Y = ((R1 - R) * Sin(A1) - S * Sin(A2 - A1) + 100) * m
    
    P0(0) = X: P0(1) = Y
    Fit(0) = X: Fit(1) = Y: Fit(2) = 0
    
    
    
    'ThisDrawing.ModelSpace.AddPoint P0
    Do
        DoEvents
        
        i = i + 1
        N = N + 1
        ReDim Preserve Fit((N + 1) * 3 - 1) '跳过第一个点,因为该点已经等于上一条曲线的最后一个点了。
        A1 = i * Pi / 180
        A2 = (R1 / R) * A1
    
        X = (-(R1 - R) * Cos(A1) - S * Cos(A2 - A1) + 100) * m
        Y = ((R1 - R) * Sin(A1) - S * Sin(A2 - A1) + 100) * m
        P(0) = X: P(1) = Y
        Fit((N + 1) * 3 - 3) = X: Fit((N + 1) * 3 - 2) = Y: Fit((N + 1) * 3 - 1) = 0
        If N = 360 Then
            '绘制样条曲线,起点和终点的切线方向为前两个点的矢量方向和最后两个点的矢量方向
            Set Sp = ThisDrawing.ModelSpace.AddSpline(Fit, Point3D(Fit(3) - Fit(0), Fit(4) - Fit(1), 0), Point3D(Fit(1077) - Fit(1074), Fit(1078) - Fit(1075), 0))
            Randomize
            'Sp.color = Int(Rnd * 255)
            N = 0
            Fit(0) = Fit(1077): Fit(1) = Fit(1078): Fit(2) = 0 '然第一点等于最后一个点,这样样条曲线才能收尾相接
        End If
        If Abs(P(0) - P0(0)) < 10 ^ -2 And Abs(P(1) - P0(1)) < 10 ^ -2 Then Exit Do
        'If i > 10 ^ 4 Then Exit Do
     Loop
     MsgBox "R=" & R & "/ R1=" & R1 & "/ L=" & L
     Prompt "R=" & R & "/ R1=" & R1 & "/ L=" & L & "/ S=" & S & vbCrLf
     End
End Sub

引用这个评论 tiancao1001 于 2008-07-19 03:00 PM 发表评论: 
按此在新窗口打开图片
按此在新窗口打开图片
按此在新窗口打开图片
按此在新窗口打开图片

引用这个评论 tiancao1001 于 2008-07-19 01:15 PM 发表评论: 
按此在新窗口打开图片

引用这个评论 tiancao1001 于 2008-07-17 09:03 PM 发表评论: 
Private Sub CommandButton2_Click()
    Dim i As Long
    Dim n As Integer
    Dim Pi As Double
    Pi = 4# * Atn(1#)
    Dim R As Long
    Randomize
    R = Int(Rnd * 100)
    Dim R1 As Long
    R1 = (0.5 - Rnd) * 199
    Dim L As Long
    L = Int(Rnd * 200)
    Dim S As Long
    S = Int(Rnd * 50)
    Dim M As Long
    M = Int(Rnd * 100)
    Dim A1 As Double
    Dim A2 As Double
    Dim P(2) As Double
    Dim P0(2) As Double
    Dim x As Double
    Dim y As Double
    
    Dim Fit() As Double
    Dim Sp As AcadSpline
    
    ReDim Fit(2)
    
    i = i + 1
    n = n + 1
    A1 = i * Pi / 180
    A2 = (R1 / R) * A1
    
    x = (-(R1 - R) * Cos(A1) - S * Cos(A2 - A1) + 100) * M
    y = ((R1 - R) * Sin(A1) - S * Sin(A2 - A1) + 100) * M
    
    P0(0) = x: P0(1) = y
    Fit(0) = x: Fit(1) = y: Fit(2) = 0
    
    'ThisDrawing.ModelSpace.AddPoint P0
    Do
        DoEvents
        
        i = i + 1
        n = n + 1
        ReDim Preserve Fit(n * 3 - 1)
        A1 = i * Pi / 180
        A2 = (R1 / R) * A1
    
        x = (-(R1 - R) * Cos(A1) - S * Cos(A2 - A1) + 100) * M
        y = ((R1 - R) * Sin(A1) - S * Sin(A2 - A1) + 100) * M
        P(0) = x: P(1) = y
        Fit(n * 3 - 3) = x: Fit(n * 3 - 2) = y: Fit(n * 3 - 1) = 0
        If n = 359 Then
            Set Sp = ThisDrawing.ModelSpace.AddSpline(Fit, Point3D(0, 0, 0), Point3D(0, 0, 0))
            Randomize
            'Sp.color = Int(Rnd * 255)
            n = 0
        End If
        If Abs(P(0) - P0(0)) < 10 ^ -2 And Abs(P(1) - P0(1)) < 10 ^ -2 Then Exit Do
        'If i > 10 ^ 4 Then Exit Do
     Loop
     MsgBox "R=" & R & "/ R1=" & R1 & "/ L=" & L
     Prompt "R=" & R & "/ R1=" & R1 & "/ L=" & L & "/ S=" & S & vbCrLf
     End
End Sub

发表评论 - 不要忘了输入验证码哦!
作者: 用户:  密码:   注册? 验证:  防止恶意留言请输入问题答案:2*4=?  
评论:

禁止表情
禁止UBB
禁止图片
识别链接
识别关键字

字体样式 文字大小 文字颜色
插入粗体文本 插入斜体文本 插入下划线
左对齐 居中对齐 右对齐
插入超级链接 插入邮件地址 插入图像
插入 Flash 插入代码 插入引用
插入列表 插入音频文件 插入视频文件
插入缩进符合
点击下载按钮 下标 上标
水平线 简介分割标记
表  情
 
Tiancao Blog All Rights Reserved 田草博客 版权所有
Copyright © 2006 - 2025