본문 바로가기

Workshop Index

Episode B 그라스호퍼 컴포넌트 챌린지 & 코딩(Python Version) (입문자용)

#RhinoPython Design Scripting Workshop
Episode A:

Tistory: Rhino Python & 디자인 컴퓨테이션 & Playlist


#RhinoGrasshopperPython Challenge!
Episode B:

Tistory: 그라스하퍼 & Python 그라스호퍼 컴포넌트 챌린지 & 코딩 , Playlist , 들어 가면서

 


 

NJ's Computational Design Lecture series -http://bit.ly/2SgBRq0

다음 브런치 디자인(Design) & 데이터(Data), 컴퓨테이셔널 디자인 -http://bit.ly/2OCfJ8P

 


강의제목:

라이노 그라스하퍼 컴포넌트 챌린지 그리고 코딩

 

이런 걸 배울 수 있어요:

라이노와 그라스하퍼의 문법의 이해

라이노 그라스하퍼를 배울 수 있어요
Python 기초 문법


컴퓨테이셔널 사고
파라메트릭 / 제너레이티브 디자인 스크립팅


지오메트리의 생성과 수정


이런 분들에게 추천해요

건축 혹은 3D 디자이너 중, 코딩을 공부하고 싶으신 분들
컴퓨테이셔널 지오메트리를 공부하고 싶으신 분들
파라메트릭 / 제너레이티브 디자인을 공부하고 싶으신 분들
컴퓨테이셔널 디자인을 공부하고 싶은 신 분들~


선수지식이 필요하다면 무엇인가요?

Rhino3D -#Grasshopper그리고CSharp02. 라이노의 문법 그리고 그라스하퍼 -link


카테고리

개발 / 프로그래밍 / 그래픽 / 크리에이티브

 

강의 수준

입문

초급 / 중급이상

 


! 라이노의 문법 그리고 그라스하퍼 

참조 비디오 - youtu.be/NlRDyHMUkvc

 

라이노의 모델링 데이터의 구조, 그리고 어떻게 Point부터 Line, Polyline, Surface, Mesh까지 어떻게 연결이 되는지 함께 알아보아요! 이 문법이 중요한 이유는, API를 이해할 수 있고, 알고리즘을 구성할 때, 이 문법에 맞춰서 데이터를 다루어야 해요! 

00:52​ - 라이노 인터페이스

13:21​ - 라이노 문법의 이해

26:20​ - 그라스하퍼 인터페이스와 생태계


My Python Module and Library / 나만의 라이브러리 & 모듈을 만들어 보자!! - link

00:00 - 라이브러리(Library & Module)의 중요성

00:54 - 폴더 찾아가기

01:42 - 나만의 라이브러리 만들기

03:18 - njs.py 파일 복사 하기

03:52 - import njs, 모듈 가져오기

04:23 - getRandom() 테스트

04:49 - addNum() 테스트

05:39 - class 만들어 보기

07:15 - Vector addition 테스트

09:31 - Vector class 테스트

11:03 - Docstring / 문서화하기

12:51 - 디버깅하기

14:22 - 요약: 나의 코드를 모듈화 시켜 나만의 라이브러리를 만들어 보자!!


01 - 들어가면서

00:00​- 배경 설명

00:24​- 초보자를 위한 그라스하퍼 / 파이썬 강의

00:40​- 선수 과목 : 파이썬 기본 문법

02:26​- 멤버십 가입 - 워크숍 관련 라이브 / 질문 / 가이드...

 


기초 Python 문법 참조 공부 자료

- Rhino Python 01 Basic Syntax - link

- Python 기초 문법 수업 참조 01 한국어] Rhino Python / 라이노 파이썬 -link

- Jupyter notebook / 디자이너를 위한 파이썬 01 주피터 노트북 -link

Python Basic / 디자이너를 위한 파이썬 02 파이썬 기초 1/2 -link
Python Basic / 디자이너를 위한 파이썬 03 파이썬 기초 2/2 -link

[한국어] 1. Introduction to Computational Design: Data, Geometry, and Visualization Using Digital Media

27:28- 그라스하퍼(GH) 플러그인 설명

27:53- Think Python 추가 자료

-----------------------------------------------------------------------

29:49- 파이썬(Colab)환경 혹은 그라스하퍼(GH)환경

31:14- 내가 생각하는 파이썬?

32:25- 변수(Variable) 그리고 자료형(type)

41:26- 숫자(Number)

46:27- 주석(Comment)

48:16- 문자열(String)

1:01:10- 변환(Casting)

1:04:13- 조건문(Conditional Statement)

1:08:31- 사족, 안 되는 게 당연하다!, 분량을 채우자

1:12:05- 사족, 소프트웨어는 평생 공부? 새로운 것 다시 공부?

1:14:31- 사족, 어차피 해야 한다면…. 나의 영어공부…

1:19:10- 컴퓨테이셔널 팅킹(Computational Thinking)의 하나의 단면

1:20:32- 반복 1 (Loop)

1:27:45- 반복 2 (While)

1:32:06- 반복 3 (double loop)

1:34:19- 좌표계(Coordinate Systems)와 반복(loop)

1:36:13- 사족, 내가 생각하는 코딩 공부의 정석?

1:37:19- 데이터 구조(Data Structure) List

1:42:29- 데이터구조(Data Structure) String as a list

1:43:26- 데이터구조(Data Structure) List 예제 1

1:48:08- 데이터 구조(Data Structure) List 예제 2

1:49:15- 사족, 내가 비보이 하면서 배운 교훈

1:52:40- 사족의 요약

1:52:53- 데이터 구조(Data Structure) Tuple

1:53:15- 함수, Function, 어떻게 코드를 디자인할까?

1:57:29- 랜덤 Random 그리고 input parameters

1:58:22- 함수 예제, Math, Datetime

1:59:40- 추가 공부 자료

2:01:13- 추가 자료 Domain, Series, Index, Remap, String… 과제

2:04:04- 과제 설명

 


Point

난이도:★☆☆☆☆

프로그래밍은 기본적으로 절차를 따라서 실행이 되죠. 맞아요! 순서대로 실행이 된다는 이야기입니다. 그래서 입력이 있으면 출력이 있게 되는 것이죠. 입력과 출력을 설계하는 것이 프로그래밍일 수 있어요.

 

디자이너들은 형태를 만들고 수정하는데, 형태를 정의하는 가장 기본단위가 무엇일까요? 어떻게 입력을 받을 수 있을까요? 라이노 장면상에 있는 포인트를 그라스하퍼로 가져와 볼까요?

 

02 - Point 가져오기
그라스하퍼에서 가장 기본적인 포인트 가져오기

00:21​- 그라스하퍼 실행

01:10​- 라이노 화면 조정

……………………………………….

01:30​- 포인트 가져오기

02:06​- 거의 모든 컴포넌트는 함수다! 인풋 그리고 아웃풋

03:38​- Internalize data / 데이터를 GH 컴포넌트에 저장하기


03 - Point 만들기

00:00​- 포인트 만들기

01:13​- Number Slider / 숫자 인풋

02:06​- 화면 렌더링 옵션

02:56​- float 숫자 만들기

03:48​- Python으로 Point 만들기

04:27​- Python 기본 문법 참조 link -https://youtu.be/cIW1fsb8ITs?list=PLw...

05:28​- rhinoscriptsyntax API 사용 addLine()

06:43​- Preview 끄기

06:57​- Python 컴포넌트, 데이터 내 보내기

08:16​- 코딩 공부 핵심: 반복


Point (Construct Point & Deconstruct Point)

난이도:★☆☆☆☆

모든 그래픽 모든 디자인의 기본 중의 기본인 포인트!! 그라스하퍼에도 포인트를 만드는 컴포넌트가 있죠.

Construct Point과 Deconstruct Point을 코드로 만들어 볼까요??

Construct Point는 XYZ의 각각의 숫자를 인풋으로 받고 아웃풋으로는 Point 3d 오브젝트를 리턴하네요!

반대로 Deconstruct Point는 포인트를 인풋으로 받고, 아웃풋으로는 X Y Z각각의 요소를 숫자로 반환해 주네요!

#Construct Point 

import rhinoscriptsyntax as rs 
pt = rs. # Deconstruct Point 

import rhinoscriptsyntax as 
rs pt = rs. x = pt[0]
y = pt[1]
z = pt[2]

# Point Class import Rhino as r 
class MyPoint: def __init__(self, x, y, z): 
    # your code goes here 

def getRhinoPoint(self): 
    # your code goes here 
    # pt return pt 

myPt = MyPoint(x, y, z); 
print(myPt) 
pt = myPt.getRhinoPoint()

 

04 - Point 분해하기

00:28​ - 포인트 분해하기, Deconstruct Point

02:44​ - Python으로 만들기 / .PointCoordinates()

04:55​ - GUID 설명

06:05​ - 데이터 구조에 맞는 for loop 구현하기

09:05​ - 데이터 저장 하기

10:16​ - 공부 방법??!!

10:53​ - 데이터 내보내기

 


실행 / Execution 

난이도:★☆☆☆☆

다음의 차이가 무엇일까요?  프로그래밍에서 왜 중요할까요?

10 * (2 + 10) - GetRandomNumber()

(10 * 2) + 10 - GetRandomNumber()


05 - 실행 순서의 중요성! 

00:00​ - 일반적인 컴퓨테이셔널 디자이너가 하는 일들

00:24​ - 실력이 발휘되어야 하는 지점

01:18​ - 계산 순서

02:16​ - 변수의 중요성

04:43​ - 다른 방식으로 한다면?

04:50​ - 변수명을 선택할 때… 예약어 / 숫자…

06:25​ - 요약하면,

07:16​ - 그라스 하퍼 컴포넌트로 만들기!

 


06 - 데이터 구조 Series , GH 컴포넌트

00:22​ - 여러 개의 포인트를 위한 데이터 구조는? Series

03:09​ - List와 Item의 데이터 매치

04:39​ - 여러 개의 아이템을 리스트로 만들기


07 - 데이터 구조 List, Python ,Series 만들기

00:00​ - 파이썬 컴포넌트로 Series 만들기!

01:07​ - For loop 만들기

05:54​ - 데이터 담기

08:10​ - 상수를 변수로

09:53​ - 파이썬 컴포넌트로 Point 만들기!

11:11​ - List에 따른, 컴포넌트의 반복 실행 문제

12:54​ - For loop 구현 하기

14:55​ - 요약하면


08 - 데이터 구조 Range(Domain), GH 컴포넌트 & Python

1차원의 데이터 혹은 공간정보를 나눌 때, Domain을 활용한 방법은 너무 나도 많이 쓰고 있어요. 쉽게 설명하면, 끝점에서 시작점을 빼서, 그 길이를 구하고 그 길이를 N으로 나누어 몇 등분으로 구획할 것인가를 정할 수 있어요 어떻게 디자이에 활용될 수 있는지 함께 알아보아요!

 

00:00 - 컴포넌트로 Range 만들기!

00:10 - Domain 만들기

02:33 - Domain의 중요성

04:02 - Python으로 domain 만들기

06:16 - For loop 구현 하기

09:25 - Point로 시각화 하기

09:41 - Domain의 중요성 요약

10:47 - 마무리(Series & Range)


Series 그리고 Range

난이도:★★★☆☆

그라스하퍼 컴포넌트 챌린지는 아무래도 그라스 하퍼에 익숙한 여러분들이 코딩을 좀 더 쉽게 이해하고 재미를 붙일 수 있도록, 그라스 하퍼 컴포넌트를 Python으로 만들어 보는 과제입니다!

시리즈(Series)와 레인지(Range) 함수를 만들어 볼까요?

 

def Series(S, N, C) : 
    result = [] 
	# your code goes here 
	# ...
	return result 

def Range(Dmin, Dmax, N): 
    result = [] 
    # your code goes here 
    # ...
    return result 

print(Series(0, 1, 100)) 
print(Range(0, 1, 100))

 

 


Scalar

11 - 데이터 Random(무작위), 현실적인 예?!

Random은 매우 유용한 함수죠! 그라스 하퍼 컴포넌트와 Python에서 어떻게 만들 수 있는지 알아보아요!

 

 

 

00:00 - Random에 대한 정리, 그리고 이전 비디오 보충 설명

01:13 - Random의 현실 적인 예는?

02:22 - If Statement / 조건문

05:14 - 데이터 시각화 하기

08:36 - Nested if statements / 중첩 조건문

10:09 - 마무리 요약

 

 

10 - 데이터 Random(무작위) 분석하기, Python

00:00 - Python Date Recorder / 파이썬으로 데이터 기록하기

06:11 - 확률로서의 Random

09:38 - 예를 들면

10:36 - Random에 Domain(범위) 적용 하기

11:14 - 작은값(Min) 큰값(Max) 구하기

15:14 - 포인트로 시각화 하기

17:23 - Python으로 Random Points 만들기

21:23 - 마무리

 

 

09 - 데이터 Random(무작위) Python

00:00 - 파이썬 컴포넌트로 Random 만들기!

00:13 - Domain 개념 복습

00:54 - Seed의 개념

01:44 - Random 컴포넌트 사용 하기

03:43 - Python으로 Random 만들기

05:08 - Random 모듈 가져 오기

07:26 - Date Recorder / 데이터 기록하기

09:45- Random 그리고 확률

 

 

Challenge, 10 데이터 Random(무작위) 분석하기, Python

00:00 - Python Date Recorder / 파이썬으로 데이터 기록하기

06:11 - 확률로서의 Random

09:38 - 예를 들면

10:36 - Random에 Domain(범위) 적용 하기

11:14 - 작은값(Min) 큰값(Max) 구하기

15:14 - 포인트로 시각화 하기

17:23 - Python으로 Random Points 만들기

21:23 - 마무리

 

Challenge, 11 데이터 Random(무작위), 현실적인 예?!

00:00 - Random에 대한 정리, 그리고 이전 비디오 보충 설명

01:13 - Random의 현실 적인 예는?

02:22 - If Statement / 조건문

05:14 - 데이터 시각화 하기

08:36 - Nested if statements / 중첩 조건문

10:09 - 마무리 요약

 

 12 데이터 Random무작위 Uniform Normal

00:00 - 과거 수업 정리

01:48 - random.uniform()

03:17 - uniform 구현하기

04:52 - random.normalvariate()

06:42 - Visualization

08:09 - point 시각화

12:07 - Random의 특성을 활용해야 한다.

12:28 - Bin을 활용한 시각화 설명

15:31 - 문서 보는 훈련!


13 Jitter, data shuffle

00:00 - 과거 수업 요약

01:00 - Jitter 컴포넌트

02:27 - 범위를 정한다.

03:27 - Python 구현

04:53 - 개념 이해

06:00 - 정규값을 도메인 길이에 맞게 Rescale

06:15 - Jitter 범위 구현

08:20 - debugging 하기

10:44 - 테스트, 개념 설명

12:51 - 실제 데이터 정렬 Sorted()

15:47 - 결괏값 출력

19:04 - seed 값

19:57 - 마무리

 

14 Stack Data

00:00 - Stack Data

00:18 - Component 이해하기

02:01 - Python 구현하기

04:33 - 흐름 설명

06:04 - 결과 출력 / 비교

07:25 - 프로그래밍은 패턴의 이해다

09:56 - 요약하면

10:27 - 마무리

 

15 Fibonacci, Repeat, Duplicate Data

00:00 - Fibonacci Component

00:19 - 패턴 이해 하기

00:55 - Python 구현하기

02:06 - for loop 구현

02:35 - 개념 설명

03:46 - 요약하면

................

04:15 - Repeat Data, 이해하기

05:42 - Python 구현하기

06:46 - 나머지 연산자

07:37 - 참조: https://youtu.be/hLhdOEqycG4?t=8

08:45 - 결과 출력 / 비교

................

09:32 - Duplicate Data

11:05 - Python 구현하기

13:47 - 패턴 이해

15:23 - Python 구현하기

16:42 - 디버깅하기

17:43 - 결과 출력 / 비교

17:59 - 요약하면

................

18:11 - 마무리 & 숙제

 

16 Cull Index, Nthm, Pattern

00:00 - Sequence

....................

00:22 - Cull Index 컴포넌트 & 내용

01:09 - Python 구현

02:39 - 조건 구현: continue

....................

05:46 - Cull Nth 컴포넌트 & 내용

06:59 - Python 구현

08:34 - 출력 & 비교

08:50 - 다른 방식의 구현

....................

09:42 - Cull Pattern 컴포넌트 & 내용

10:09 - 결국 Array(List)를 다루는 방법

11:47 - 다른 방식의 구현

14:51 - For loop 구현

15:34 - 컨디션 변화

....................

16:10 - 수체계 개념과 디자인의 활용 정리 요약

 

17 Random Reduce Component

00:00 - Random Reduce Component

00:14 - 컴포넌트 설명

00:50 - Python 구현

01:37 - 알고리즘 설명

02:13 - While 문 구현

05:47 - 반복되는 인덱스 제거, if not in

09:21 - 인덱스에 따라 재구성

11:02 - 알고리즘 요약

12:58 - 결과 출력 & 비교

13:33 - 인덱스 0 예외 처리

16:00 - 문제 설명

17:32 - 마무리

18:18 - 요약

 


List Section

18 Insert Item, Item Index, List Item

00:00 - 이전 시간 요약: Sequence

00:18 - List 그룹 컴포넌트 개념 이해

01:08 - 문자열 데이터 생성

.....................................

02:13 - Insert Item component

03:23 - Python 구현

.....................................

06:07 - Item Index Component

07:37 - List Item Component

08:29 - 값 비교가 아닌 참조된 주소값 비교

08:55 - Python 구현

10:57 - 비교 구문 구현 ==

14:20 - 비교 is 구현

.....................................

17:38 - 학습 방법 리마인드

 

19 List Length, Partition

00:00 - List 그룹

...........................

00:08 - List Length 컴포넌트

00:50 - Python 구현

02:13 - len()

...........................

02:26 - Partition List 컴포넌트 & 이해

03:47 - Python 구현

07:34 - 조건 구현

09:25 - 결과 출력

11:13 - 디버깅하기

12:09 - Tree 데이터 구조

13:10 - 마지막 리스트 구조받기

14:32 - 요약을 하면

...........................

17:02 - 마무리

 

 

20 Replace items

00:00 - 라이브로 코딩 수업을 하는 이유

01:01 - Replace Items 컴포넌트

02:45 - Python 구현

04:16 - For loop 구현

05:13 - 조건문 구현

06:36 - indexing 접근과 길이에 대해, 왜 -1 계산?

07:11 - 조건문 구현

08:48 - 디버깅

10:44 - 인덱싱(indexing)과 슬라이싱(slicing)

14:39 - 개념 설명

15:21 - 디버깅

17:23 - 마무리

 

21 Reverse, Shift, Split, Sort List

00:00 - Array(List)에 대한 생각

...........................

00:44 - Reverse List 컴포넌트

01:08 - Python 구현

03:49 - 다른 방식의 구현

...........................

04:47 - Shift List 컴포넌트

06:17 - Python 구현

08:29 - 숙제

...........................

09:02 - Split List 컴포넌트

09:59 - Python 구현

12:08 - 숙제

12:25 - 슬라이싱으로 구현

 

22 Sort List

00:00 - Sort List 컴포넌트 이해

03:03 - Python 구현 cast 구현: chr()

03:55 - 개념설명

05:41 - Python 구현

07:05 - for loop 구현

08:27 - .sort()

08:53 - 정렬된 인덱스 출력

11:24 - 결과확인

12:17 - 디버깅

...........................

14:37 - Sub List 컴포넌트

15:48 - Python 구현

...........................

17:04 - 마무리

 

23 List related components

00:00 - List 그룹

00:38 - Dispatch 컴포넌트

01:30 - Null Item 컴포넌트

02:53 - Pick'n'choose 컴포넌트

04:30 - Replace Nulls 컴포넌트

05:15 - Weave 컴포넌트

06:11 - Cross Reference 컴포넌트

08:07 - Longest List 컴포넌트

09:40 - 숙제와 List 마무리 요약

 

 

 


Vector

 

* 1차원 함수 / 1D function 왜 중요할까요?

RhinoPython 04 Function 1D / 라이노 파이썬 04 1차원 함수 1/2 - link

RhinoPython 04 Function 1D / 라이노 파이썬 04 1차원 함수 2/2 - link

 

 

* 포인트 2D (3D) Grid 왜 중요할까요?

워크숍:

RhinoPython 05 Point Gird 2D / 라이노 파이썬 05 2D포인트 그리드 - link

RhinoPython 06 Point Gird Pattern / 라이노 파이썬 06 2D, 3D포인트 그리드 패턴 - link


참조:

자료구조, 픽셀, 복셀 / Data Structure for design, pixel, and voxel data structure 2/2 - link

QnA 14, 복셀(Voxel)과 컴퓨테이셔널 디자인 그리고 건축 디자인 - link

 

 

Vector Operation  - link

 

 


 

Matrix & Tensor

 

 

 


Geometry: Point / Line / 

 

 

 

Geometry: Line

 

Line, Intersection, Length / 라인, 라인교차, 라인의 길이 - link

- 라인은, 사실 두 개의 포인트로 정의될 수 있어요. 라인의 교차점 그리고 길이를 잴 수 있는 3가지 방법에 대해서 알아볼까요? 이런 기능들은 컴퓨테이셔널  디자이너로서 어떻게 바라보면 좋을까요? 어떻게 활용해서 내가 원하는 디자인 알고리즘을 짤 수 있을까요?
 

00:00 - 오늘의 수업
00:52 - 파이썬 컴포넌트 만들기
02:51 - .LineLineIntersection / 라인 라인 교차점 찾기
04:07 - .Distance / 라인의 길이
06:20 - 거리 계산방법
10:31 - 3가지 거리 계산 방식
11:25 - 요약
12:03 - 잔소리: 코딩 공부 방법


Line Data, Start, end mid-point

00:00 - 과거 수업 리뷰

00:31 - 오늘의 수업: line

00:50 - 라이노 장면에서 지오메트리 데이터 가져오기

01:23 - 라인에서 가져올 수 있는 데이터는?

01:57 - Python 컴포넌트 라인 가져오기

04:06 - Line의 정점 가져오기

04:47 - Cast 개념

05:15 - 길이 가져오기

06:54 - rs.coerceline()

07:41 - .From , .To 시작점과 끝점

08:53 - 중간점 잡기

09:41 - rs.CurveMidPoint()

10:30 - 중간 점 계산해 보기

13:11 - 마무리

 

Line, End Points, Length - Video link

난이도:★☆☆☆☆

오늘은, 라인에 대한 기초적인 컴포넌트를 알아볼까요?

첫 번째로, Line 컴포넌트네요, A와 B는 포인트를 인풋으로 받고, 두 개의 포인트를 연결한 선을 반환하면 되겠죠?

두 번째로는, 인풋 C, 즉 커브를 받는데, 여기서는 L로 라인을 받기로 해요. 그리고 S와 E, 즉 Start와 End 점을 반환해주는 것이죠. 첫 번째 컴포넌트의 반대라고 볼 수 있어요!

사실 포인트로 라인 데이터를 생성하고, 다시, 라인 데이터에서 포인트 데이터를 재 추출하는 훈련을 하는 것은 결국 라인은 점에 대한 라인의 표상이라 볼 수 있고요. 점을 추출하고 변형하는 것이 지오메트리를 수정하는 아주 기본이 되는 기초라고 볼 수 있어요!

그리고 마지막으로 Length 컴포넌트는 선의 길이를 반환해 주겠죠? 우리는 간단한 라인이기 때문에 B에서 A를 빼면 길이가 나올 거예요!

# Line import rhinoscriptsyntax as rs 
line = rs. 

# Start / End Point 
import rhinoscriptsyntax as rs 
sPt = rs. 
ePt = rs. 

# length 
import rhinoscriptsyntax as rs 
length = rs.

 


 

Geometry: Polyline

Polyline, Curve, Interpolation Data: start, end, mid, closest point

00:00 - 오늘의 수업: Polyline, Curve 만들기

00:15 - Point 가져오기

01:21 - Python 컴포넌트 만들기

01:39 - rs.AddPolyline()

02:16 - rs.IsPolyline()

03:44 - workshop list - https://www.youtube.com/playlist?list=PLweNVwGgDKEb94hRD2OT4bNWhtO0Ggu_o

03:58 - rs.CurveLength()

04:22 - rs.CurveStartPoint()

04:57 - rs.CurveEndPoint()

05:06 - rs.CurveMidPoint()

06:43 - rs.AddInterpCurve()

06:20 - rs.IsCurve()

06:50 - 가까운 점 찾기 개념

08:09 - rs.CurveClosestPoint()

09:12 - 좌표계 설명 xyz, uv, t

11:06 - rs.EvaluateCurve()

12:08 - rhinoscriptsyntax 단점

12:30 - rs.AddCurve()

12:59 - degree 단계와 해석의 차이

14:21 - 요약

 

Bézier, Sigmid, Circle, Arc, Helix, Gear Curve

00:00 - 오늘의 수업소개

00:24 - Bézier curve

01:52 - 커브에서 t 값의 포인트 찾기

03:50 - Sigmid curve

07:16 - Circle curve

09:24 - Arc curve

10:51 - Helix curve

11:47 - Gear Curve 

 

Polyline, Interpolate, Nurbs Curve, Length, Divide Curve - Video link

난이도: ★★☆☆☆

포인트들이 모이면 커브를 만들 수 있어요. 라이노에서는 폴리 라인도 커브의 하위 class로 보고 있죠. 즉 커브가 좀 더 포괄적인 개념인 것이죠.

첫 번째로, 인풋 V는 Vertices로서 폴리 라인 혹은 커브의 정점들을 이야기하죠. 즉 각각의 포인트들을 연결해서 폴리 라인을 만들고, Nurbs의 단계 즉 Degree를 적용함으로 정점의 관계를 보간하여 커브를 생성해주죠!

두 번째로는, 커브의 길이와 커브를 여러 개의 포인트로 나누어(미분) 볼 수 있고, 그 포인트들의 길이를 다 더하면(적분)하면 길이를 알 수 있어요!

 

# Polyline import rhinoscriptsyntax as rs 
a = rs. 

# Interpolate import rhinoscriptsyntax as rs 
a = rs. 

# Nurbs Curve import rhinoscriptsyntax as rs 
a = rs. 

# Length 1 
import rhinoscriptsyntax as rs 
a = rs. 

# Length 2 import rhinoscriptsyntax as rs 
a = rs.DivideCurve(curve, num) 
dis = 0.0
for i in range(len(a)-1): 
	dis += rs.Distance(a[i], a[i+1]) 
	theDis = dis;

 


Circle, Ellipse, Arc, Rectangle 

Circle & Data

00:00 - 오늘의 수업 Circle

00:16 - rs.AddCircle()

01:38 - Plane 개념

06:00 - 예를 들면

07:17 - Plane의 상하 관계

08:07 - 생각들...

08:49 - Circle 응용

10:05 - 수체계는 상상의 도구이다!

11:26 - 다시 설명하면,

12:29 - 곱하기 어떻게 볼까? https://youtu.be/h5YphJY54nI

13:18 - rs.AddCircle3Pt()

15:18 - 다양한 Circle 생성방법

15:52 - Circle 데이터 가져오기

16:13 - rs.CircleCenterPoint()

16:06 - rs.CircleCircumference()

17:29 - rs.Area()

 

Circle Packing Implementation

00:00 - 오늘의 수업: Circle Packing 구현

00:21 - Boundary 정의

01:25 - 함수 정의: AddCircle()

02:14 - Circle 생성

03:23 - Domain에 따른 Random 구현

05:09 - 개념 설명: 수학의 추상화, 디자인의 도구

06:03 - Random 포인트 만들기

08:00 - Circle Packing의 큰 두 가지 개념

09:04 - 여기서 취하는 방식은!

09:52 - Line Intersect

12:52 - Circle 충돌 공식 개념

13:20 - Circle Intersect 구현

15:13 - 충돌 감지 구현

16:50 - 거리 측정 개념, rs.Distance()

18:16 - 충돌 테스트

20:40 - 기존 Circle과 충돌 테스트 구현

22:58 - 디버깅하기

24:21 - 성공 확률 출력

25:09 - 숙제로 해볼 것?


Ellipse, Data, QuadPoints Tower Example

00:00 - 디자인 기술 도구인 코딩!

01:03 - rs.AddEllipse()

02:23 - rs.RotateObject()

.............

04:39 - Tower 만들기

06:38 - 추가 파라미터 적용 하기

08:00 - math.pow() 적용

09:40 - Ellipse Data

10:17 - EllipseCenterPoint()

10:36 - EllipseQuadPoints()

11:27 - Start & End Points

12:46 - 마무리


Arc, Basic Move, Rotate Object

00:00 - 이전 수업 요약

00:14 - 오늘 수업: Arc

00:34 - rs.AddArc()

01:54 - Rotation

02:42 - rs.RotateObject()

03:42 - 참조 / Reference에 대해

06:22 - rs.MoveObject()

07:06 - Point를 이용해서 이동시키기

08:14 - 이동과 회전의 순서에 따라 결과가 달라진다!

09:32 - 마무리

 Arc, Data, Rotation Based on Axis

00:00 - Arc의 데이터

00:10 - Start & End Point

01:32 - rs.ArcAngle()

01:50 - rs.ArcCenterPoint()

02:03 - rs.ArcMidPoint()

02:10 - rs.ArcRadius()

04:14 - 중간 요약

04:36 - 가까운 점 찾기

05:53 - rs.EvaluateCurve()

06:32 - 중간 정리

.............

07:40 - rs.Rotate() 자세히 알아보자

11:22 - X 축으로 회전하기

12:18 - arc의 중심으로 회전

13:39 - arc의 중간점으로 회전

14:03 - 오늘의 수업 마무리


Rectangle & Plane & Point

00:00 - 오늘의 수업 Rectangle

00:56 - Rect를 장면에 만드는 방법들

01:19 - Python으로 Rect 만들기

01:26 - Plane

03:19 - rs.MovePlane()

04:21 - 개념 설명

05:17 - Point의 활용

06:24 - Plane으로 Cast 하기

 

Rectangle and Optimization

00:00 - 특정 조건에 맞는 사각형 만들기

01:12 - rs.Area()

02:42 - Optimization 최적화 조건 기술

06:26 - 최적화가 완료되는 시점 기술

07:36 - 결과 확인 및 튜닝

10:17 - 최적화의 방향성 튜닝

12:49 - 단순함으로 복잡함을 기술

14:28 - 수정 사항

15:06 - 화면 지오메트리 색 수정

16:21 - 조건을 만족하는 여러 값들을 찾기

16:48 - while 조심할 점

18:05 - 찾아낸 데이터 담기

19:23 - 결과 해석

20:23 - 숙제!

22:07 - 학습 전략!

 

N-Gon, Closed Polyline, Star shape

00:00 - 오늘의 수업: N-Gon

00:40 - Python 컴포넌트 만들기

01:17 - Radian 구하기

02:13 - 반복문 구현

03:25 - Circle 구현

03:52 - 개념 설명

06:13 - safeguard 설치

07:09 - 숙제 & 개념 설명

07:50 - Line 연결 개념

09:09 - Line 구현

11:17 - 닫힌 폴리곤 연결

11:27 - 코드 최적화

13:23 - 결과 시각화

..........

13:36 - Start shape 개념

14:31 - 구현 시작

15:43 "%" 나머지 연산

17:53 - 결과 시각화

18:22 - 마무리

 


Decomposition & Modification

Decompose Line & Data

00:00 - 전 수업 요약

00:25 - 워크숍 시리즈 - https://www.youtube.com/playlist?list=PLweNVwGgDKEb94hRD2OT4bNWhtO0Ggu_o

01:13 - 개념 요약 01:18 - Scalar

01:34 - 2D Vector

01:45 - 3D Vector

02:19 - Line & Polyline entity

03:06 - 결국 Points관계성의 해석이다

03:43 - 커브객체의 포인트로 분해

............

04:42 - Line, Start, end Points

06:04 - Length, Distance

08:29 - rs.SplitCurve()

10:18 - 리스트에서 아이템 뽑아오기

.............

11:43 - 다른 방식으로 선을 나누기!

11:53 - rs.CurveMidPoint()


Decompose Polyline & Data

00:00 - Polyline 가져오기

00:50 - 오늘의 수업 목표

01:06 - 포인트 추출 방법

01:40 - rs.PolylineVertices()

02:35 - For 반복문의 차이점!!

03:33 - 연결 개념 설명과 구현

05:52 - 결과 시각화

06:38 - rs.JoinCurves()

08:27 - t값에 따라 라인 나누기

09:11 - Polyline 나누기


Divide line and polyline segment

00:00 - Polyline divide

00:26 - 2개의 Point 만들기

01:31 - 라인 자르기 개념

03:23 - 길이로 나누기

06:18 - 파라미터 연결하기

06:55 - 개수로 나누기

08:17 - 구현하기

09:22 - Visualization

09:38 - 라인 개수 말고, 포인트의 개수로...

11:02 - 마무리 요약

 

Curve, SplitCurve, DivideCurve, DivideCurveLength

00:00 - 오늘의 수업

00:20 - NURBS에 대한 생각

01:04 - NURBS Curve 만들기

01:48 - rs.SplitCurve()

04:21 - 길이에 따라 선 자르기

05:27 - rs.DivideCurve()

07:38 - rs.DivideCurveLength()

08:32 - 숙제 설명


Curve, SplitCurve, CopyObject & Debugging

00:00 - 오늘의 수업: 커브 자르기

00:45 - 전략(알고리즘) 설명

01:43 - for loop 구현

02:44 - 예약어 사용 금지!!

03:32 - 두개의 포인트 가져오기

04:20 - rs.SplitCurve()

05:54 - 개념설명

06:52 - 디버깅

08:27 - 문제점 인식

08:44 - rs.CopyObject()

10:01 - 잘라진 커브 리스트 반환

11:37 - 반대 커브 자르기 개념

12:35 - 디버깅

13:32 - Code Refactoring & Debugging

14:16 - 문제점 인식과 설명

14:59 - safeguard 설치

15:36 - 결과 확인

15:44 - 마무리 요약

16:18 - 컴퓨테이셔널 사고와 코딩

..........

16:42 - rs.TrimCurve()

18:03- Trim 개념

Fillet, Arc, Line Vector

00:00 - 이전 수업 요약 그리고 주제: fillet

00:19 - Python 컴포넌트

00:58 - rs.CurveFilletPoints()

02:20 - Arc 그리기 & 파라미터

05:08 - Arc를 위한 Vector

06:41 - 선의 방향 백터 구하기

07:05 - 그라스하퍼로 개념 이해

09:09 - Line의 방향성 Vector 시각화

09:32 - Fillet에 Vector 적용하기

11:22 - Python 코드 구현 rs.VectorSubtract()

12:09 - VectorUnitize()

13:05 - 중간요약

13:48 - 결국 문제해결 과정이 중요


Fillet Example, Polyline & fillet, GetDirection

00:00 - 오늘의 수업: Polyline & fillet

00:21 - 준비하기

00:54 - rs.PolylineVertices()

02:38 - 개념 & 전략 설명

04:01 - 결과 시각화

...........

04:08 - Line, Fillet 하기

04:42 - rs.CurveFilletPoints()

06:06 - Matrix to List

..........

06:46 - Fillet 구현

07:04 - GetDirection()

08:52 - rs.CurveFilletPoints()

09:50 - 응용을 해보면...

10:06 - 파라미터 연결

10:29 - 결국, 디자인 프로세스


Fillet Example, Polyline & Trim, Arc

00:00 - Split 구현

00:14 - 일반적인 전략 설명

01:14 - 적용할 알고리즘

02:16 - 사용할 데이터 저장

03:11 - Line 반복하기

03:50 - 조건 구현

06:05 - rs.TrimCurve()

08:05 - 첫 번째 지오메트리 확인

08:26 - 끝 지오메트리에 대응

09:36 - rs.CurveDomain()

10:00 - 중간 요약 & 알고리즘(전략) 설명

11:19 - 중간 지오메트리들 대응

12:22 - 결과 확인

12:28 - Arc 순서대로 담기

14:13 - 결과 확인

14:51 - 마무리

15:19 - 실패의 결과는 실력


Geometry: Surface

Cone, Sphere, Projection

00:00 - Cone points

02:27 - 코드를 분석의 중요성

03:13 - Point 수정

05:55 - Sphere points

07:57 - 구를 펼치면 4 각형 패널이 된다.

10:29 - Point 수정, Attraction

12:19 - Spherical projection

15:27 - Code 설명

17:16 - 마무리

 

 


Geometry: Mesh

 

 


Geometry: Polygon