RU/Matrix

From Multi Theft Auto: Wiki
Revision as of 00:09, 30 November 2014 by Strix (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Матрицы — одна из самых мощных возможностей ООП в MTA. Матрицы были и раньше с функцией getElementMatrix, но мы получали ужасную для работы таблицу. Теперь, с новым классом Matrix, мы можем создавать и волшебно манипулировать матрицами.

Методы

Использование матриц

Предположим, вы хотите созать мусорное ведро - объект 1337 - в двух еденицах впереди игрока. Вы не хотите вручную работать с тригонометрией и запутанными таблицами. Вы просто хотите получить позицию в двух еденицах впереди игрока, учитывая его вращение. Вам понадобятся только эти функции Matrix.getForward. Matrix.getPosition и getElementMatrix. Это просто:

Object ( 1337, player.matrix.position + player.matrix.forward * 2 )

Why not stick to the good ol' tables?

Say you'd like to get find the position underneath a vehicle. This is the position at any rotation. So if it was upside down, the Z value would be higher than the vehicle Z value. If the vehicle was the right way round, the Z value for underneath car would be less than the Z value for the car.

--
-- Вместо:
--
local matrix = getElementMatrix(vehicle)
local offX = 0 * matrix[1][1] + 0 * matrix[2][1] - 1 * matrix[3][1] + matrix[4][1]
local offY = 0 * matrix[1][2] + 0 * matrix[2][2] - 1 * matrix[3][2] + matrix[4][2]
local offZ = 0 * matrix[1][3] + 0 * matrix[2][3] - 1 * matrix[3][3] + matrix[4][3]

local pX, pY, pZ = getElementPosition(vehicle)
local positionBelow = {offX-pX, offY-pY, offZ-pZ}

--
-- Вы можете просто сделать так:
--
local positionBelow = vehicle.position - vehicle.matrix.up