# [name]

فئة تمثل 4x4 [link:https://en.wikipedia.org/wiki/Matrix_(mathematics) matrix].
أكثر استخدامات مصفوفة 4x4 شيوعًا في الرسومات الحاسوبية ثلاثية الأبعاد هي كـ [link:https://en.wikipedia.org/wiki/Transformation_matrix Transformation Matrix]. لمقدمة عن مصفوفات التحول كما هو مستخدم في WebGL ، تحقق من [link:http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices هذا البرنامج التعليمي].
يسمح هذا لـ[page:Vector3] يمثل نقطة في الفضاء ثلاثي الأبعاد بالخضوع التحولات مثل الترجمة والدوران والقص والتحجيم والانعكاس و الإسقاط المتعامد أو المنظور وهكذا ، عن طريق ضربه بـ المصفوفة. يُعرف هذا باسم `تطبيق` المصفوفة على المتجه.
كل [page:Object3D] لديه ثلاث Matrix4s مرتبطة:

- [page:Object3D.matrix]: يخزن هذا التحول المحلي للكائن. هذا هو تحول الكائن نسبةً إلى والده.
- [page:Object3D.matrixWorld]: التحول العالمي أو العالمي لـ الكائن. إذا لم يكن للكائن والد ، فإن هذا مطابق للتحول المحلي المخزن في [page:Object3D.matrix matrix].
- [page:Object3D.modelViewMatrix]: يمثل هذا تحول الكائن نسبةً إلى نظام إحداثيات الكاميرا. مصفوفة modelViewMatrix للكائن هي matrixWorld للكائن مضروبًا بـ matrixWorldInverse للكاميرا.

[page:Camera Cameras] لديها ثلاث Matrix4s إضافية:

- [page:Camera.matrixWorldInverse]: مصفوفة العرض - عكس Camera's [page:Object3D.matrixWorld matrixWorld].
- [page:Camera.projectionMatrix]: يمثل المعلومات حول كيفية إسقاط المشهد على مسافة قص.
- [page:Camera.projectionMatrixInverse]: عكس projectionMatrix.

ملاحظة: [page:Object3D.normalMatrix] ليست Matrix4 ، ولكنها [page:Matrix3].

## ملاحظة حول ترتيب الصف الرئيسي والعمود الرئيسي

يأخذ الباني وطريقة [page:.set set]() المعاملات في [link:https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order row-major] ترتيب ، في حين يتم تخزينها داخليًا في مصفوفة [page:.elements elements] بترتيب العمود الرئيسي.
هذا يعني أن الاتصال `const m = new THREE.Matrix4(); m.set( 11، 12، 13، 14، 21، 22، 23، 24, 31، 32، 33، 34، 41، 42، 43، 44 );` ستؤدي إلى مصفوفة [page:.elements elements] التي تحتوي على: `m.elements = [ 11, 21, 31, 41, 12, 22, 32, 42, 13, 23, 33, 43, 14, 24, 34, 44 ];` وداخليًا يتم إجراء جميع الحسابات باستخدام ترتيب العمود الرئيسي. ومع ذلك ، نظرًا لأن الترتيب الفعلي لا يحدث فرقًا رياضيًا و معظم الناس معتادون على التفكير في المصفوفات بترتيب الصف الرئيسي ، توثق three.js المصفوفات بترتيب الصف الرئيسي. فقط تذكر أنه إذا كنت قراءة شفرة المصدر ، ستضطر إلى أخذ [link:https://en.wikipedia.org/wiki/Transpose transpose] من أية مصفوفات الموضح هنا لجعل المحاسبات منطقية.

## استخراج الموضع والدوران والمقياس

هناك العديد من الخيارات المتاحة لاستخراج الموضع والدوران و المقياس من Matrix4.

- [page:Vector3.setFromMatrixPosition]: يمكن استخدامه لاستخراج مكون الترجمة.
- [page:Vector3.setFromMatrixScale]: يمكن استخدامه لاستخراج المقياس مكون.
- [page:Quaternion.setFromRotationMatrix] ، [page:Euler.setFromRotationMatrix] أو [page:.extractRotation extractRotation] يمكن استخدامه لاستخراج مكون الدوران من مصفوفة نقية (غير متساوية القياس).
- [page:.decompose decompose] يمكن استخدامه لاستخراج الموضع والدوران والمقياس كلهم في آن واحد.

## المنشئ (Constructor)

### [name]( [param:Number n11], [param:Number n12], [param:Number n13], [param:Number n14], [param:Number n21], [param:Number n22], [param:Number n23], [param:Number n24], [param:Number n31], [param:Number n32], [param:Number n33], [param:Number n34], [param:Number n41], [param:Number n42], [param:Number n43], [param:Number n44] )

ينشئ مصفوفة 4x4 بالمعاملات المعطاة بترتيب الصف. إذا لم يتم توفير أي معاملات ، فإن الباني يقوم بتهيئة الـ[name] إلى مصفوفة 4x4[link:https://en.wikipedia.org/wiki/Identity_matrix identity matrix].

## الخصائص (Properties)

### [property:Array elements]

قائمة [link:https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order column-major] من قيم المصفوفة.

## الطرق (Methods)

### [method:Matrix4 clone]()

ينشئ Matrix4 جديدًا بـ[page:.elements elements] متطابقة لهذه واحد.

### [method:this compose]( [param:Vector3 position], [param:Quaternion quaternion], [param:Vector3 scale] )

يضع هذه المصفوفة على التحول المكون من[page:Vector3 position] ، [page:Quaternion quaternion] و[page:Vector3 scale].

### [method:this copy]( [param:Matrix4 m] )

ينسخ [page:.elements elements] من المصفوفة [page:Matrix4 m] في هذه المصفوفة.

### [method:this copyPosition]( [param:Matrix4 m] )

ينسخ مكون الترجمة من المصفوفة المعطاة [page:Matrix4 m] في مكون الترجمة لهذه المصفوفة.

### [method:this decompose]( [param:Vector3 position], [param:Quaternion quaternion], [param:Vector3 scale] )

يقوم بتحليل هذه المصفوفة إلى مكوناتها[page:Vector3 position] ،[page:Quaternion quaternion] و[page:Vector3 scale].
ملاحظة: ليست جميع المصفوفات قابلة للتحليل بهذه الطريقة. على سبيل المثال ، إذا كان كائن لديه والد غير متساوي القياس ، فقد لا تكون مصفوفة العالم الخاصة بالكائن قابلة للتحليل ، وقد لا تكون هذه الطريقة مناسبة.

### [method:Float determinant]()

يحسب ويعيد[link:https://en.wikipedia.org/wiki/Determinant determinant] لهذه المصفوفة.
بناءً على الطريقة المبينة [link:http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.html هنا].

### [method:Boolean equals]( [param:Matrix4 m] )

يرجع صحيحًا إذا كانت هذه المصفوفة و[page:Matrix4 m] متساويتين.

### [method:this extractBasis]( [param:Vector3 xAxis], [param:Vector3 yAxis], [param:Vector3 zAxis] )

يستخرج[link:https://en.wikipedia.org/wiki/Basis_(linear_algebra) basis] من هذه المصفوفة في المتجهات الثلاثة المحورية المقدمة. إذا كانت هذه المصفوفة :

[ a b c d e f g h i j k l m n o p ]

ثم سيتم تعيين[page:Vector3 xAxis] ،[page:Vector3 yAxis] ،[page:Vector3 zAxis] إلى:

xAxis = [ a e i ] , yAxis = [ b f j ] , and zAxis = [ c g k ]

### [method:this extractRotation]( [param:Matrix4 m] )

يستخرج مكون الدوران من المصفوفة المعطاة [page:Matrix4 m] في مكون الدوران لهذه المصفوفة.

### [method:this fromArray]( [param:Array array], [param:Integer offset] )

[page:Array array] - المصفوفة التي يتم قراءة العناصر منها.
[page:Integer offset] - (اختياري) إزاحة في المصفوفة. الافتراضي هو 0.
يضع عناصر هذه المصفوفة بناءً على [page:Array array] في [link:https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order column-major] تنسيق.

### [method:this invert]()

يعكس هذه المصفوفة ، باستخدام [link:https://en.wikipedia.org/wiki/Invertible_matrix#Analytic_solution الطريقة التحليلية]. لا يمكنك عكس مع محدد صفر. إذا حاولت ذلك ، فإن الطريقة تنتج مصفوفة صفرية بدلاً من ذلك.

### [method:Float getMaxScaleOnAxis]()

يحصل على أقصى قيمة مقياس للمحاور الثلاثة.

### [method:this identity]()

يعيد تعيين هذه المصفوفة إلى [link:https://en.wikipedia.org/wiki/Identity_matrix مصفوفة الهوية].

### [method:this lookAt]( [param:Vector3 eye], [param:Vector3 target], [param:Vector3 up] )

يبني مصفوفة دوران ، تبحث من[page:Vector3 eye] نحو [page:Vector3 target] متجهًا بالمتجه[page:Vector3 up].

### [method:this makeRotationAxis]( [param:Vector3 axis], [param:Float theta] )

[page:Vector3 axis] - محور الدوران ، يجب تطبيعه.
[page:Float theta] - زاوية الدوران بالراديان.
يضع هذه المصفوفة كتحويل دوران حول[page:Vector3 axis] بـ [page:Float theta] راديان.
هذا بديل مثير للجدل نوعًا ما ولكنه صحيح رياضيًا للدوران عبر[page:Quaternion Quaternions]. انظر المناقشة [link:https://www.gamedev.net/articles/programming/math-and-physics/do-we-really-need-quaternions-r1199 هنا].

### [method:this makeBasis]( [param:Vector3 xAxis], [param:Vector3 yAxis], [param:Vector3 zAxis] )

قم بتعيين هذا إلى [link:https://en.wikipedia.org/wiki/Basis_(linear_algebra) basis] مصفوفة تتكون من المتجهات الأساسية الثلاثة المقدمة:

[ xAxis.x yAxis.x zAxis.x 0 xAxis.y yAxis.y zAxis.y 0 xAxis.z yAxis.z zAxis.z 0 0 0 0 1 ]

### [method:this makePerspective]( [param:Float left], [param:Float right], [param:Float top], [param:Float bottom], [param:Float near], [param:Float far] )

ينشئ [link:https://en.wikipedia.org/wiki/3D_projection#Perspective_projection perspective projection] مصفوفة. يتم استخدام هذا داخليًا بواسطة [page:PerspectiveCamera.updateProjectionMatrix]()

### [method:this makeOrthographic]( [param:Float left], [param:Float right], [param:Float top], [param:Float bottom], [param:Float near], [param:Float far] )

ينشئ مصفوفة اسقاط متعامدة[link:https://en.wikipedia.org/wiki/Orthographic_projection orthographic projection]. يتم استخدام هذا داخليًا بواسطة [page:OrthographicCamera.updateProjectionMatrix]().

### [method:this makeRotationFromEuler]( [param:Euler euler] )

يضع مكون الدوران (المصفوفة العلوية اليسرى 3x3) من هذه المصفوفة على الدوران المحدد بالزاوية المعطاة[page:Euler Euler Angle]. باقي المصفوفة يتم تعيينها على المعرف. اعتمادًا على[page:Euler.order order] من[page:Euler euler] ، هناك ست نتائج محتملة. راجع [link:https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix هذه الصفحة] للحصول على قائمة كاملة.

### [method:this makeRotationFromQuaternion]( [param:Quaternion q] )

يضع مكون الدوران من هذه المصفوفة على الدوران المحدد بـ [page:Quaternion q] ، كما هو مبين [link:https://en.wikipedia.org/wiki/Rotation_matrix#Quaternion هنا]. ال باقي من المصفوفة يتم تعيينه إلى المعرف. لذلك ، بالنظر إلى[page:Quaternion q] = w + xi + yj + zk ، فإن المصفوفة الناتجة ستكون:

[ 1 - 2 y 2 - 2 z 2 2 x y - 2 z w 2 x z + 2 y w 0 2 x y + 2 z w 1 - 2 x 2 - 2 z 2 2 y z - 2 x w 0 2 x z - 2 y w 2 y z + 2 x w 1 - 2 x 2 - 2 y 2 0 0 0 0 1 ]

### [method:this makeRotationX]( [param:Float theta] )

[page:Float theta] - زاوية الدوران بالراديان.
يضع هذه المصفوفة كتحويل دوران حول محور X بواسطة [page:Float theta] (θ) راديان. المصفوفة الناتجة ستكون:

[ 1 0 0 0 0 cos θ - sin θ 0 0 sin θ cos θ 0 0 0 0 1 ]

### [method:this makeRotationY]( [param:Float theta] )

[page:Float theta] - زاوية الدوران بالراديان.
يضع هذه المصفوفة كتحويل دوران حول محور Y بواسطة [page:Float theta] (θ) راديان. المصفوفة الناتجة ستكون:

[ cos θ 0 sin θ 0 0 1 0 0 - sin θ 0 cos θ 0 0 0 0 1 ]

### [method:this makeRotationZ]( [param:Float theta] )

[page:Float theta] - زاوية الدوران بالراديان.
يضع هذه المصفوفة كتحويل دوران حول محور Z بواسطة [page:Float theta] (θ) راديان. المصفوفة الناتجة ستكون:

[ cos θ - sin θ 0 0 sin θ cos θ 0 0 0 0 1 0 0 0 0 1 ]

### [method:this makeScale]( [param:Float x], [param:Float y], [param:Float z] )

[page:Float x] - المقدار الذي يجب تغييره في محور X.
[page:Float y] - المقدار الذي يجب تغييره في محور Y.
[page:Float z] - المقدار الذي يجب تغييره في محور Z.
يضع هذه المصفوفة كتحويل قياس:

[ x 0 0 0 0 y 0 0 0 0 z 0 0 0 0 1 ]

### [method:this makeShear]( [param:Float xy], [param:Float xz], [param:Float yx], [param:Float yz], [param:Float zx], [param:Float zy] )

[page:Float xy] - المقدار الذي يجب قصه X بواسطة Y.
[page:Float xz] - المقدار الذي يجب قصه X بواسطة Z.
[page:Float yx] - المقدار الذي يجب قصه Y بواسطة X.
[page:Float yz] - المقدار الذي يجب قصه Y بواسطة Z.
[page:Float zx] - المقدار الذي يجب قصه Z بواسطة X.
[page:Float zy] - المقدار الذي يجب قصه Z بواسطة Y.
يضع هذه المصفوفة كتحويل قص:

[ 1 yx zx 0 xy 1 zy 0 xz yz 1 0 0 0 0 1 ]

### [method:this makeTranslation]( [param:Vector3 v] )

### [method:this makeTranslation]( [param:Float x], [param:Float y], [param:Float z] ) // واجهة برمجة التطبيقات الاختيارية

يضع هذه المصفوفة كتحويل ترجمة من متجه [page:Vector3 v] ، أو أرقام [page:Float x] ، [page:Float y] و [page:Float z]:

[ 1 0 0 x 0 1 0 y 0 0 1 z 0 0 0 1 ]

### [method:this multiply]( [param:Matrix4 m] )

تعدل هذه المصفوفة بعد ضربها بـ[page:Matrix4 m].

### [method:this multiplyMatrices]( [param:Matrix4 a], [param:Matrix4 b] )

يضع هذه المصفوفة على[page:Matrix4 a] x[page:Matrix4 b].

### [method:this multiplyScalar]( [param:Float s] )

يضرب كل مكون من مكونات المصفوفة بقيمة مقياسية[page:Float s].

### [method:this premultiply]( [param:Matrix4 m] )

تعدل هذه المصفوفة قبل ضربها بـ[page:Matrix4 m].

### [method:this scale]( [param:Vector3 v] )

يضرب أعمدة هذه المصفوفة بالمتجه[page:Vector3 v].

### [method:this set]( [param:Float n11], [param:Float n12], [param:Float n13], [param:Float n14], [param:Float n21], [param:Float n22], [param:Float n23], [param:Float n24], [param:Float n31], [param:Float n32], [param:Float n33], [param:Float n34], [param:Float n41], [param:Float n42], [param:Float n43], [param:Float n44] )

قم بتعيين عناصر المصفوفة الخاصة بك إلى القيم الموردة بترتيب الصف الرئيسي قيم [page:Float n11] ، [page:Float n12] ، ... [page:Float n44].

### [method:this setFromMatrix3]( [param:Matrix3 m] )

قم بتعيين عناصر 3x3 العلوية لهذه المصفوفة إلى قيم Matrix3 [page:Matrix3 m].

### [method:this setPosition]( [param:Vector3 v] )

### [method:this setPosition]( [param:Float x], [param:Float y], [param:Float z] ) // واجهة برمجة تطبيقات اختيارية

يضع مكون الموضع لهذه المصفوفة من المتجه [page:Vector3 v] ، دون التأثير على بقية المصفوفة - أي إذا كانت المصفوفة هي حاليا:

[ a b c d e f g h i j k l m n o p ]

هذا يصبح:

[ a b c v.x e f g v.y i j k v.z m n o p ]

### [method:Array toArray]( [param:Array array], [param:Integer offset] )

[page:Array array] - (اختياري) مصفوفة لتخزين المتجه الناتج فيها.
[page:Integer offset] - (اختياري) إزاحة في المصفوفة التي يجب وضعها فيها النتيجة.
يكتب عناصر هذه المصفوفة في مصفوفة في [link:https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order تنسيق العمود الرئيسي].

### [method:this transpose]()

[link:https://en.wikipedia.org/wiki/Transpose يعكس] هذه المصفوفة.

## المصدر (Source)

[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]