NCF参数化建筑论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 10840|回复: 6
打印 上一主题 下一主题

[在线求助] 求教script问题

[复制链接]
跳转到指定楼层
1m
发表于 2010-10-13 18:53:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
就是101里关于递归的那部分,做弧形树枝的,我按他的方法写了,但是不知道该怎么运行,我运行时无效的,这里附上我写的那个文件,求高人帮忙看一下,是不是还差什么地方不对,谢了

问题.rvb

2.17 KB, 下载次数: 1, 下载积分: 照度 -1 lux

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
2m
 楼主| 发表于 2010-10-13 18:55:41 | 只看该作者

                               
登录/注册后可看大图
附上图片
3m
发表于 2010-10-14 02:30:19 | 只看该作者
这个脚本书上好像缺几行代码 我记得坛子创立初期好像发过完整的代码
4m
发表于 2010-10-14 02:32:26 | 只看该作者
Option Explicit
'Script written by <insert name>
'Script copyrighted by <insert company name>
'Script version 2009年3月11日 22:13:15

Call Main()
Sub Main()
        Dim ptStart: ptStart = Array(0,0,0)
        Dim vecDir: vecDir = Array(0,0,1)
        Dim Props: Props = Array(3,4,6,5,0.8,30,0.7)
        Dim Generation: Generation = 2
        Call RecursiveGrowth(ptStart, vecDir, Props, Generation)
End Sub

Sub RecursiveGrowth(ByVal ptStart, ByVal vecDir, ByVal Props(), ByVal Generation)
        If Generation > Props(2) Then Exit Sub
        Dim ptGrow, vecGrow, newTwig
        Dim newProps : newProps = Props
        newProps(3) = Props(3) * Props(4)
        newProps(5) = Props(5) * Props(6)
        If newProps(5) > 90 Then newProps(5) = 90
        Dim N, maxN
        maxN = CInt(Props(0) + Rnd() * (Props(1) - Props(0)))
        For N = 1 To maxN
                ptGrow = RandomPointInCone(ptStart, vecDir, 0.25*Props(3), Props(3), Props(5))
                newTwig = AddArcDir(ptStart, ptGrow, vecDir)
                If Not IsNull(newTwig) Then
                        vecGrow = CurveTangent(newTwig, CurveDomain(newTwig)(1))
                        Call RecursiveGrowth(ptGrow, vecGrow, newProps, Generation+1)
                End If
        Next
End Sub

Function RandomPointInCone(ByVal Origin, ByVal Direction, _
        ByVal MinDistance, ByVal MaxDistance, ByVal MaxAngle)
        Dim vecTwig
        vecTwig = VectorUnitize(Direction)
        vecTwig = VectorScale(vecTwig, MinDistance + Rnd() * (MaxDistance-MinDistance))
        Dim MutationPlane
        MutationPlane = PlaneFromNormal(Array(0,0,0), vecTwig)
        vecTwig = VectorRotate(vecTwig, Rnd() * maxAngle, MutationPlane(1))
        vecTwig = VectorRotate(vecTwig, Rnd() * 360, Direction)
        RandomPointInCone = PointAdd(Origin, vecTwig)
End Function

Function AddArcDir(ByVal ptStart, ByVal ptEnd, ByVal vecDir)
        AddArcDir = Null
        Dim vecBase : vecBase = PointSubtract(ptEnd, ptStart)
        If VectorLength(vecBase) = 0.0 Then Exit Function
        If IsVectorParallelTo(vecBase, vecDir) Then Exit Function
        vecBase = VectorUnitize(vecBase)
        vecDir = VectorUnitize(vecDir)
        Dim vecBisector : vecBisector = VectorAdd(vecDir, vecBase)
        vecBisector = VectorUnitize(vecBisector)
        Dim dotProd : dotProd = VectorDotProduct(vecBisector, vecDir)
        Dim midLength : midLength = (0.5 * Distance(ptStart, ptEnd)) / dotProd
        vecBisector = VectorScale(vecBisector, midLength)
        AddArcDir = AddArc3Pt(ptStart, ptEnd, PointAdd(ptStart, vecBisector))
End Function

自己对照着看吧
5m
 楼主| 发表于 2010-10-14 10:12:05 | 只看该作者
太感谢了,继续苦读
6m
发表于 2011-12-6 16:30:23 | 只看该作者
问问楼主这是什么书 啊
7m
发表于 2011-12-8 22:47:16 | 只看该作者
很好。。。。。。

小黑屋|手机版|NCF参数化建筑论坛 ( 浙ICP备2020044100号-2 )    辽公网安备21021102000973号

GMT+8, 2024-11-22 09:23 , Processed in 0.071682 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表