//二次元の座標を扱うメタ関数

//代入
__fn V3_set $d $x $y $z {
    v[0 + __id($d)..2 + __id($d)] = [$x, $y, $z]

}

__fn V3_copy $d $s1 {
    __loop 3 $i {
        v[$i + __id($d)] = v[$i + __id($s1)]

    }

}

//加算
__fn V3_add $d $s1 $s2 {
    __loop 3 $i {
        v[$i + __id($d)] = v[$i + __id($s1)] + v[$i + __id($s2)]

    }

}

__fn V3_asAdd $d $s1 {
    __loop 3 $i {
        v[$i + __id($d)] += v[$i + __id($s1)]

    }

}

//減算
__fn V3_sub $d $s1 $s2 {
    __loop 3 $i {
        v[$i + __id($d)] = v[$i + __id($s1)] - v[$i + __id($s2)]

    }

}

__fn V3_asSub $d $s1 {
    __loop 3 $i {
        v[$i + __id($d)] -= v[$i + __id($s1)]

    }

}

//乗算
__fn V3_mul $d $s1 $s2 {
    __loop 3 $i {
        v[$i + __id($d)] = v[$i + __id($s1)] * v[$i + __id($s2)]

    }

}

__fn V3_asMul $d $s1 {
    __loop 3 $i {
        v[$i + __id($d)] *= v[$i + __id($s1)]

    }

}

__fn V3_mulScalar $d $s1 $m {
    __loop 3 $i {
        v[$i + __id($d)] = v[$i + __id($s1)] * ($m)

    }

}

__fn V3_asMulScalar $d $m {
    v[0 + __id($d)..2 + __id($d)] *= $m

}

//除算
__fn V3_div $d $s1 $s2 {
    __loop 3 $i {
        v[$i + __id($d)] = v[$i + __id($s1)] / v[$i + __id($s2)]

    }

}

__fn V3_asDiv $d $s1 {
    __loop 3 $i {
        v[$i + __id($d)] /= v[$i + __id($s1)]

    }

}

__fn V3_divScalar $d $s1 $m {
    __loop 3 $i {
        v[$i + __id($d)] = v[$i + __id($s1)] / ($m)

    }

}

__fn V3_asDivScalar $d $m {
    v[0 + __id($d)..2 + __id($d)] /= $m

}