전체 글 673

클로저 (2)

- 개요https://shoark7.github.io/programming/python/closure-in-python Python의 Closure에 대해 알아보자Python에서 유용한 Closure에 대해 살펴봅니다.shoark7.github.io 클로저는 감싼 Outer 함수에서 감싸진 Inner 함수를 반환하는 설계방식이다이때 Inner 함수는 자신을 둘러싼 Outer 함수의 스코프의 상태값을 참조하는데,Outer 함수가 메모리에서 제거되어도 값이 유지된다는 특징을 지니고 있다 파이썬에서 클로저를 사용하는 이유는 다음과 같이 정리할 수 있다변수에 대한 관리와 책임을 Closure를 통해 변수에 접근하는 방식으로 명확히 설계할 수 있음Closure에 의해 변수에 접근하므로 변수간의 불필요한 충돌을 막..

2차원 벡터의 표현과 입력을 통한 벡터의 위치 변경

1) 2차원 벡터의 표현struct Vector2{public: ... // 연산자 - 스칼라 곱과 벡터의 합 연산을 지정 ... FORCEINLINE constexpr Vector2 operator*(float InScalar) const; FORCEINLINE constexpr Vector2 operator+(const Vector2& InVector) const; ... // 정적멤버변수 - Dimension을 사용하여 n차원을 지정 ... static constexpr BYTE Dimension = 2; // union을 사용하여 멤버변수 X와 Y를 사용하지 않고도 // array를 통해서도 접근할 수 있도록 설정 union { struct { float X, Y; }; std::a..

열 기준 행렬과 행 기준 행렬

- 개요행렬과 벡터의 곱셈을 수행하는 방식으로 열 기준 행렬과 행 기준 행렬의 두 가지가 존재한다수학에서 행렬을 다루는 경우 열 기준 행렬을 주로 사용하지만,컴퓨터에서 행렬을 다루는 경우 행 기준 행렬을 사용하는 상황이 있다 1) 열 기준 행렬 열 기준 행렬의 경우 위와 같이 연산한다곱하는 벡터를 행렬의 뒤에 배치하여 연산을 수행한다 2) 행 기준 행렬 행 기준 행렬의 경우 위와 같이 연산한다열 벡터와 다르게 곱하는 벡터를 행렬의 앞에 배치하여 연산을 수행한다이렇게 진행하는 경우 연산 결과가 의도하는 방향으로 반환되지 않는 것을 확인할 수 있다 3) 행 기준 행렬에서 의도하는 결과가 나오도록 수정 의도하는 결과가 나오도록 행 기준 행렬의 배치를 위와 같이 수정하였다 수정한 결과에서 열 기준 방식의 행..

정방행렬의 곱셈

1) 정방행렬간의 곱2 X 2 정방행렬이 2차원 벡터 공간의 선형 변환에 대응한다면,2 X 2 정방행렬간의 곱은 합성함수에 대응하는 연산이다 벡터 v에 선형 변환을 나타내는 2 X 2 정방행렬인 A, B를 순서대로 연산한다고 가정한다면,연산 순서는 오른쪽에서 왼쪽으로 수행하므로 수식은 위와 같다 위의 수식을 세 개의 2차원 공간 V, U, W에 대해 2번의 선형 변환을 거쳐벡터 공간 V에 속한 벡터 v가 벡터 공간 W에 속한 벡터 w에 대응되는 관계로 해석할 수 있다 선형 변환을 담당하는 구성요소들인 정방행렬 A, B 그리고 벡터 v의 각 요소를 위와 같이 행렬로 표현한다 벡터 v가 벡터 w로 변환되는 과정은 위와 같이 행렬 곱으로 표현이 가능하다 2 X 2 정방행렬간의 곱셈은 합성함수이므로 ..

Redo 패널

- 개요Redo 패널은 가장 최근에 수행한 사항을 되돌릴 수 있도록 왼쪽 하단에서 제공하는 패널이다BPY에서 Redo 패널을 생성하는 방법을 알아본다 1) Operator 클래스...class AR_OT_my_op(Operator): bl_label = "Button" bl_idname = "ar.myop_operator" bl_options = {'REGISTER', 'UNDO'} location : bpy.props.FloatVectorProperty() def execute(self, context): bpy.ops.mesh.primitive_cube_add(location = self.location) return {'FINISHED'} ..

타이머

- 개요bpy.app.timers.register(function, first_interval=0, persistent=False)위의 함수를 사용하면 first_interval 인자로 넣은 값만큼의 시간 후에 function 인자로 넣은 함수를 호출한다이때 function 인자로 받는 함수는 인자가 없는 함수여야 한다또 function 인자로 받는 함수에서 실수를 반환하게끔 수정하여 반환된 실수를 주기로 함수를 호출할 수 있다함수의 호출을 중단하고 싶다면 None을 반환하면 된다 1) 일반적인 regsiter 함수의 사용import bpydef test_tick(): bpy.ops.mesh.primitive_cube_add()bpy.app.timers.register(test_tick, first..

Info 메세지 출력

- 개요bpy에서는 report 함수를 사용하여 메세지를 생성할 수 있다인자로는 type과 message를 사용하는데, message는 메세지에 담을 문구를 의미하고type의 경우 메세지의 타입을 의미한다 사용가능한 type의 종류는 위와 같다 1) 메인 패널 클래스...import bpyfrom bpy.types import Panel, Operator class AI_PT_main_panel(Panel): bl_label = "Main Panel" bl_idname = "AI_PT_main_panel" bl_space_type = 'VIEW_3D' bl_region_type = 'UI' bl_category = "New Tab" def draw(self, conte..