Grasshopper 生成(二)

import rhinoscriptsyntax as rs
import random, math
from ghpythonlib import components as comp


def mapFromAToB( t, A, B):
    (startA,endA) = A
    (startB,endB) = B
    return comp.RemapNumbers( t, 
                              comp.ConstructDomain(startA,endA), 
                              comp.ConstructDomain(startB,endB) )[0] 


def getPointByParameter( line, t ):
    (p0,p1) = line
    ghP0 = comp.ConstructPoint(p0[0],p0[1],p0[2])
    ghP1 = comp.ConstructPoint(p1[0],p1[1],p1[2])
    ghLine = comp.Line( ghP0,ghP1 )
    # return a point 3d
    return comp.EvaluateCurve(ghLine, t)[0]

def getRandom(offset):
    return random.uniform(-offset, offset)

# 在line0与line1之间均匀的画num根线

def drawLerpLines( line0,line1, num):
    res = []
    for i in range(num+1):
        t0= mapFromAToB(i, (0, num), (0, 1))
        p0 = getPointByParameter( line0, t0 )
        t1 = mapFromAToB(i, (0, num), (0, 1))
        p1 = getPointByParameter( line1, t1 )
        res.append(rs.AddLine( p0,p1 ))
    return res

###############################主要代码#########################################
numX = 19
numY = 20
xStep = 50.0
yStep = 50.0
zStep = 50.0
xOffset = xStep/2.0
yOffset = yStep/2.0
zOffset = zStep/2.0
ary = []
############################## method 2d #######################################
myLines_2d = []
for i in range(numY):
    myLines_2d.append([])
    for j in range(numX):
        myLines_2d[i].append(None)

#创建直线
for i in range(numY):
    for j in range(numX):

        #aryB.append(rs.AddTextDot( "i"+ str(i)+",j"+str(j), (xStep*j, yStep*i) ))

        p0 = ( xStep*j-xOffset + getRandom(xOffset),
                yStep*i         + getRandom(yOffset),
                0         + getRandom(zOffset) )#0
        p1 = ( xStep*j+xOffset + getRandom(xOffset),
                yStep*i         + getRandom(yOffset),
                0         + getRandom(zOffset) )#0

        myLines_2d[i][j]=(p0,p1)

for i in range(numY):
    if i%2 == 0:
        continue
    for j in range(numX):
        if j%2 == 0:
            continue
        #ary.append(rs.AddLine( myLines_2d[i][j][0],myLines_2d[i][j][1] ))
        if i != 0:
            # (1,12)
            lerpLinesNum = 8 #int( mapFromAToB(i, (0, numY), (0, numY)) )#1,12
            #print (lerpLinesNum)
            ary.extend(drawLerpLines( myLines_2d[i-1][j], myLines_2d[i][j],lerpLinesNum))

a = ary

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值