/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project .
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License , v . 2 . 0 . If a copy of the MPL was not distributed with this
* file , You can obtain one at http : //mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice :
*
* 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 .
*/
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 3 D to another point in 3 D . The last line of a
complete 4 by 4 matrix is omitted , since it is implicitly 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
AffineMatrix3D and vs = [ xs , ys , zs ] ^ T , vd = [ xd , yd , zd ] ^ T two 3 D
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 3 D coordinates
there is also a projection from 3 D to 2 D device coordinates needed .
Only then the total transformation matrix ( including projection to 2 D )
and the device resolution determine the actual measurement unit in 3 D . < p >
@ since OOo 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;
};
}; }; }; };
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Messung V0.5 in Prozent C=98 H=100 G=98
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-10-05)
¤
*© Formatika GbR, Deutschland