| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| #ifndef __com_sun_star_geometry_AffineMatrix3D_idl__ |
| #define __com_sun_star_geometry_AffineMatrix3D_idl__ |
| |
| module com { module sun { module star { module geometry { |
| |
| /** This structure defines a 3 by 4 affine matrix.<p> |
| |
| The matrix defined by this structure constitutes an affine mapping |
| of a point in 3D to another point in 3D. The last line of a |
| complete 4 by 4 matrix is omitted, since it is implicitely assumed |
| to be [0,0,0,1].<p> |
| |
| An affine mapping, as performed by this matrix, can be written out |
| as follows, where <code>xs, ys</code> and <code>zs</code> are the source, and |
| <code>xd, yd</code> and <code>zd</code> the corresponding result coordinates: |
| |
| <code> |
| xd = m00*xs + m01*ys + m02*zs + m03; |
| yd = m10*xs + m11*ys + m12*zs + m13; |
| zd = m20*xs + m21*ys + m22*zs + m23; |
| </code><p> |
| |
| Thus, in common matrix language, with M being the |
| <type>AffineMatrix3D</type> and vs=[xs,ys,zs]^T, vd=[xd,yd,zd]^T two 3D |
| vectors, the affine transformation is written as |
| vd=M*vs. Concatenation of transformations amounts to |
| multiplication of matrices, i.e. a translation, given by T, |
| followed by a rotation, given by R, is expressed as vd=R*(T*vs) in |
| the above notation. Since matrix multiplication is associative, |
| this can be shortened to vd=(R*T)*vs=M'*vs. Therefore, a set of |
| consecutive transformations can be accumulated into a single |
| AffineMatrix3D, by multiplying the current transformation with the |
| additional transformation from the left.<p> |
| |
| Due to this transformational approach, all geometry data types are |
| points in abstract integer or real coordinate spaces, without any |
| physical dimensions attached to them. This physical measurement |
| units are typically only added when using these data types to |
| render something onto a physical output device. For 3D coordinates |
| there is also a projection from 3D to 2D device coordiantes needed. |
| Only then the total transformation matrix (oncluding projection to 2D) |
| and the device resolution determine the actual measurement unit in 3D.<p> |
| |
| @since OpenOffice 2.0 |
| */ |
| struct AffineMatrix3D |
| { |
| /// The top, left matrix entry. |
| double m00; |
| |
| /// The top, left middle matrix entry. |
| double m01; |
| |
| /// The top, right middle matrix entry. |
| double m02; |
| |
| /// The top, right matrix entry. |
| double m03; |
| |
| /// The middle, left matrix entry. |
| double m10; |
| |
| /// The middle, middle left matrix entry. |
| double m11; |
| |
| /// The middle, middle right matrix entry. |
| double m12; |
| |
| /// The middle, right matrix entry. |
| double m13; |
| |
| /// The bottom, left matrix entry. |
| double m20; |
| |
| /// The bottom, middle left matrix entry. |
| double m21; |
| |
| /// The bottom, middle right matrix entry. |
| double m22; |
| |
| /// The bottom, right matrix entry. |
| double m23; |
| }; |
| |
| }; }; }; }; |
| |
| #endif |