안녕하세요, 코틀린으로 된 소스를 분석 중에 다음 부분이 잘 이해가 안되서 문의 드려요.
분석이 잘 안되는 코틀린 소스는 아래와 같습니다.
val tmp = Array(4) { Coordinate2F(1.0f, 1.0f) } * arrayOf ( Coordinate2F(1.0f, 0.0f), Coordinate2F(0.0f, 2.0f) ) |
Coordinate2F 는 Float 값 2개를 x, y로 받아 들이는 일종의 벡터 데이터 구조체 입니다.
data class Coordinate2F(var x: Float=0f, var y: Float=0f) { constructor(x: Int, y: Int): this(x.toFloat(), y.toFloat()) operator fun plus(a: Coordinate2F) = Coordinate2F(x+a.x, y+a.y) fun setValues(c: Coordinate2F) { x = c.x; y = c.y } override fun toString(): String { return "x: $x, y: $y" } } |
제가 이해하기로는
Array(4) { Coordinate2F(1.0, 1.0) } 는 값이 (x: 1.0, y: 1.0)인 Coordinate2F 4개의 배열
arrayOf ( Coordinate2F(1.0f, 0.0f), Coordinate2F(0.0f, 2.0f) ) 는 값이 (x: 1.0, y: 0.0), (x: 0.0, y: 2.0)인 2개짜리 배열
인데요.
이 두 값을 * 로 곱하는 부분이 어떤 의미 인지 잘 모르겠습니다.
벡터의 곱 혹은 매트릭스(?) 연산 일까요? 어떤 수학적인(혹은 기하학적인) 의미가 있을거 같은데 잘 모르겠네요 ㅠㅠ
소스만으로는 크기가 다른 배열의 곱으로 추정을 하는게 맞는거 같은데요 음..
[ (1, 1), (1, 1), (1, 1), (1, 1) ] * [ (1,0), (0,2) ]
고수 분들의 고견을 기다리겠습니다. (_ _)
operator fun Array<Coordinate2F>.times(other: Array<Coordinate2F>): [아마도 배열] {
...
}
형태의 extension function이 어딘가에 선언되어 있을 것 같네요.
거기에 어떤 연산을 하는지 정의되어 있을 겁니다.
여기 문서 참고하세요
그래서 결과적으로 * 연산자는 Coordinate2F(1.0f, 1.0f) 하고 arrayOf ( Coordinate2F(1.0f, 0.0f), Coordinate2F(0.0f, 2.0f) ) 를 곱한다는 뜻이구요. 그 결과가 4개의 Coordinate2F가 되는 것입니다.