[DevTip] Rhino 3D에서 sine파형 그리기
Rhino 3D에서 사인파를 그릴 일이 있었는데, 방법을 몰라 한참 헤멨다.
Visual Basic Script를 사용하면 될 것 같았는데, VB은 쓸 줄 몰라서 배워서 하기에도 그렇고...
일단 구글에서 검색하니 http://www.supermanoeuvre.com/blog/?p=92에서 스크립트가 나온다.
스크립트 본문을 옮기자면...
--------------------------------------------------------------------
Option Explicit
'Script written by www.supermanoeuvre.com
Call math_SinWave()
Sub math_SinWave()
Dim dblWavelength : dblWavelength = 1
Dim intPts2Plot : intPts2Plot = 50
Dim dblMagnitude : dblMagnitude = 0.5
Dim dblFrequency : dblFrequency = 1
Dim i
Dim uStep, tParam
ReDim arrPtSet1(intPts2Plot), arrPtSet2(intPts2Plot)
uStep = dblWavelength / intPts2Plot
''' EXAMPLE: Classic sine()wave formula
tParam = ((2 * PI)*dblFrequency) / intPts2Plot
''' EXAMPLE: Shortened wave period
' tParam = ((2 *(PI/3))*dblFrequency) / intPts2Plot
For i = 0 To intPts2Plot
' Traditional Direction
arrPtSet1(i) = Array( i*uStep, Sin(i*tParam)*dblMagnitude, 0 )
' Opposite direction - note difference of Y component
'arrPtSet2(i) = Array( i*uStep, Sin( (intPts2Plot-i) *tParam)*dblMagnitude, 0 )
Next
' draw the resultant curves
Call Rhino.AddInterpCurve(arrPtSet1)
'Call Rhino.AddInterpCurve(arrPtSet2)
End Sub
---------------------------------------------------------------------------
문제는 이걸 어떻게 쓰느냐...
도구->RhinoScript->실행... 로드... 편집...
을 쓰면 된다.
'편집'으로 위 내용을 파일로 저장(자동으로 Rhino VBScripts는 .rvb로 저장)하고,
'로드'로 파일 내용을 읽고,
'로드'나 '실행'에서 정의된 함수(math_SinWave)를 실행하면 정의된 파형이 그려진다.
파형 속성은 아래 변수들로 조정하면 되는데,
길이(dblWaveLength), 주기당 편집점 수(intPts2Plot), 진폭의 절반(dblMagnitude), 주파수(dblFrequency)를 조정한다.
dblWaveLength가 진짜 파장이 아닌 그리고자 하는 전체 길이이고,
dblMagnitude가 전체 진폭이 아닌, 진폭의 반이라는 점이 함정.
어쨌든 누군가의 제대로 된 참조 한 건!
Visual Basic Script를 사용하면 될 것 같았는데, VB은 쓸 줄 몰라서 배워서 하기에도 그렇고...
일단 구글에서 검색하니 http://www.supermanoeuvre.com/blog/?p=92에서 스크립트가 나온다.
스크립트 본문을 옮기자면...
--------------------------------------------------------------------
Option Explicit
'Script written by www.supermanoeuvre.com
Call math_SinWave()
Sub math_SinWave()
Dim dblWavelength : dblWavelength = 1
Dim intPts2Plot : intPts2Plot = 50
Dim dblMagnitude : dblMagnitude = 0.5
Dim dblFrequency : dblFrequency = 1
Dim i
Dim uStep, tParam
ReDim arrPtSet1(intPts2Plot), arrPtSet2(intPts2Plot)
uStep = dblWavelength / intPts2Plot
''' EXAMPLE: Classic sine()wave formula
tParam = ((2 * PI)*dblFrequency) / intPts2Plot
''' EXAMPLE: Shortened wave period
' tParam = ((2 *(PI/3))*dblFrequency) / intPts2Plot
For i = 0 To intPts2Plot
' Traditional Direction
arrPtSet1(i) = Array( i*uStep, Sin(i*tParam)*dblMagnitude, 0 )
' Opposite direction - note difference of Y component
'arrPtSet2(i) = Array( i*uStep, Sin( (intPts2Plot-i) *tParam)*dblMagnitude, 0 )
Next
' draw the resultant curves
Call Rhino.AddInterpCurve(arrPtSet1)
'Call Rhino.AddInterpCurve(arrPtSet2)
End Sub
---------------------------------------------------------------------------
문제는 이걸 어떻게 쓰느냐...
도구->RhinoScript->실행... 로드... 편집...
을 쓰면 된다.
'편집'으로 위 내용을 파일로 저장(자동으로 Rhino VBScripts는 .rvb로 저장)하고,
'로드'로 파일 내용을 읽고,
'로드'나 '실행'에서 정의된 함수(math_SinWave)를 실행하면 정의된 파형이 그려진다.
파형 속성은 아래 변수들로 조정하면 되는데,
길이(dblWaveLength), 주기당 편집점 수(intPts2Plot), 진폭의 절반(dblMagnitude), 주파수(dblFrequency)를 조정한다.
dblWaveLength가 진짜 파장이 아닌 그리고자 하는 전체 길이이고,
dblMagnitude가 전체 진폭이 아닌, 진폭의 반이라는 점이 함정.
어쨌든 누군가의 제대로 된 참조 한 건!
댓글
댓글 쓰기