• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

marble

  • sources
  • kde-4.12
  • kdeedu
  • marble
  • src
  • plugins
  • render
  • satellites
  • mex
attlib.cpp
Go to the documentation of this file.
1 //
2 // This file is part of the Marble Virtual Globe.
3 //
4 // This program is free software licensed under the GNU LGPL. You can
5 // find a copy of this license in LICENSE.txt in the top directory of
6 // the source code.
7 //
8 // Copyright 2012 Gerhard HOLTKAMP
9 //
10 
11 /***********************************************************************
12  3-Dim Vector and Matrix Definitions and Operations
13 
14  Linux C++ version
15 
16  Author: Gerhard HOLTKAMP 15-APR-2010
17  ***********************************************************************/
18 
19 //#include <iostream>
20 #include <cmath>
21 using namespace std;
22 
23 #include "attlib.h"
24 
25 /*********************************************************************/
26 double atan20 (double y, double x)
27 {
28  /* redefine atan2 so that it does'nt crash when both x and y are 0 */
29  double result;
30 
31  if ((x == 0) && (y == 0)) result = 0;
32  else result = atan2 (y, x);
33 
34  return result;
35 }
36 
37 
38  Vec3::Vec3(double x, double y, double z)
39  {assign(x, y, z);}
40 
41  Vec3::Vec3 (const Vec3& c)
42  {
43  for (int j = 0; j<3; ++j) v[j] = c.v[j];
44  }
45 
46 
47  void Vec3::assign (double x, double y, double z)
48  {
49  v[0]=x; v[1]=y; v[2]=z;
50  }
51 
52  double& Vec3::operator [] (unsigned index)
53  {
54  return (index < 3) ? * (v + index) : *v;
55  }
56 
57  Vec3& Vec3::operator = (const Vec3& c)
58  {
59  for (int j = 0; j<3; ++j) v[j] = c.v[j];
60  return *this;
61  }
62 
63  Vec3& Vec3::operator += (const Vec3& c)
64  {
65  for (int j = 0; j<3; ++j) v[j] = v[j] + c.v[j];
66  return *this;
67  }
68 
69  Vec3& Vec3::operator -= (const Vec3& c)
70  {
71  for (int j = 0; j<3; ++j) v[j] = v[j] - c.v[j];
72  return *this;
73  }
74 
75  Vec3& Vec3::operator *= (const Vec3& c) // cross product
76  {
77  Vec3 result;
78  result.v[0] = v[1] * c.v[2] - v[2] * c.v[1];
79  result.v[1] = v[2] * c.v[0] - v[0] * c.v[2];
80  result.v[2] = v[0] * c.v[1] - v[1] * c.v[0];
81  for (int j = 0; j<3; ++j) v[j] = result.v[j];
82  return *this;
83  }
84 
85  Vec3& Vec3::operator *= (double r)
86  {
87  for (int j = 0; j<3; ++j) v[j] = r * v[j];
88  return *this;
89  }
90 
91  Vec3& Vec3::operator /= (double r)
92  {
93  double q;
94 
95  if (r < 1E-100) q = 0.0;
96  else q = 1.0 / r;
97  for (int j = 0; j<3; ++j) v[j] = q * v[j];
98  return *this;
99  }
100 
101  double abs(const Vec3& c) // absolute value
102  {
103  double result=0;
104 
105  for (int j=0; j<3; ++j) result += c.v[j]*c.v[j];
106  return sqrt(result);
107  }
108 
109  double dot (const Vec3& c1, const Vec3& c2) // dot product
110  {
111  double result=0;
112 
113  for (int j = 0; j<3; ++j) result += c1.v[j]*c2.v[j];
114  return result;
115  }
116 
117  Vec3 operator + (const Vec3& c1, const Vec3& c2)
118  {
119  Vec3 result;
120 
121  for (int j = 0; j<3; ++j) result.v[j] = c1.v[j] + c2.v[j];
122  return result;
123  }
124 
125  Vec3 operator - (const Vec3& c1, const Vec3& c2)
126  {
127  Vec3 result;
128 
129  for (int j = 0; j<3; ++j) result.v[j] = c1.v[j] - c2.v[j];
130 
131  return result;
132  }
133 
134  Vec3 operator * (double r, const Vec3& c1)
135  {
136  Vec3 result;
137 
138  for (int j = 0; j<3; ++j) result.v[j] = r * c1.v[j];
139  return result;
140  }
141 
142  Vec3 operator * (const Vec3& c1, double r)
143  {
144  Vec3 result;
145 
146  for (int j = 0; j<3; ++j) result.v[j] = c1.v[j] * r;
147  return result;
148  }
149 
150  Vec3 operator * (const Vec3& c1, const Vec3& c2) // cross product
151  {
152  Vec3 result;
153 
154  result.v[0] = c1.v[1] * c2.v[2] - c1.v[2] * c2.v[1];
155  result.v[1] = c1.v[2] * c2.v[0] - c1.v[0] * c2.v[2];
156  result.v[2] = c1.v[0] * c2.v[1] - c1.v[1] * c2.v[0];
157  return result;
158  }
159 
160  Vec3 operator / (const Vec3& c1, double r)
161  {
162  double q;
163  Vec3 result;
164 
165  if (r < 1E-100) q = 0.0;
166  else q = 1.0 / r;
167  for (int j = 0; j<3; ++j) result.v[j] = q * c1.v[j];
168  return result;
169  }
170 
171  Vec3 vnorm (const Vec3& c) // norm vector
172  {
173  int j;
174  double q=0;
175  Vec3 result;
176 
177  for (j=0; j<3; ++j) q += c.v[j]*c.v[j];
178  q = sqrt(q);
179  if (q < 1E-100) q = 0.0;
180  else q = 1.0 / q;
181  for (j=0; j<3; ++j) result.v[j] = c.v[j]*q;
182  return result;
183  }
184 
185  Vec3 carpol (const Vec3& c) // Cartesian -> Polar
186  /* Convert vector from cartesian coordinates c = [x, y, z]
187  into polar coordinates v = [rho, phi, theta]
188  where rho is the radius, phi the "azimuth" and theta the
189  "declination" (equatorial plane = 0, pole = 90ø)
190  */
191  {
192  double x, y, z, r;
193  Vec3 result;
194 
195  x = c.v[0];
196  y = c.v[1];
197  z = c.v[2];
198  r = x*x + y*y;
199  result.v[0] = sqrt (r + z*z);
200  result.v[1] = atan20 (y, x);
201  if (result.v[1] < 0) result.v[1] += 2.0*M_PI;
202  r = sqrt (r);
203  result.v[2] = atan20 (z, r);
204 
205  return result;
206  }
207 
208  Vec3 polcar (const Vec3& c) // Polar -> Cartesian
209  /* Convert vector from polar coordinates c = [rho, phi, theta]
210  where rho is the radius, phi the "azimuth" and theta the
211  "declination" (equatorial plane = 0, pole = 90ø)
212  into vector v = [x, y, z] of cartesian coordinates.
213  */
214  {
215  double r;
216  Vec3 result;
217 
218  r = c.v[0] * cos(c.v[2]);
219  result.v[0] = r * cos(c.v[1]);
220  result.v[1] = r * sin(c.v[1]);
221  result.v[2] = c.v[0] * sin(c.v[2]);
222 
223  return result;
224  }
225 
226  ostream& operator << (ostream& os, const Vec3& c)
227  {
228  os << "[" << c.v[0] << "," << c.v[1] << "," << c.v[2] << "]";
229  return os;
230  }
231 
232 /*******************************************************************/
233 
234 Mat3::Mat3 (double x)
235  {
236  int i, j;
237 
238  for (i=0; i<3; ++i)
239  for (j=0; j<3; ++j) m[i][j] = x;
240  }
241 
242 Mat3::Mat3 (const Mat3& c)
243  {
244  int i, j;
245 
246  for (i=0; i<3; ++i)
247  for (j=0; j<3; ++j) m[i][j] = c.m[i][j];
248  }
249 
250 void Mat3::assign (double x11, double x12, double x13,
251  double x21, double x22, double x23,
252  double x31, double x32, double x33)
253  {
254  m[0][0] = x11;
255  m[0][1] = x12;
256  m[0][2] = x13;
257  m[1][0] = x21;
258  m[1][1] = x22;
259  m[1][2] = x23;
260  m[2][0] = x31;
261  m[2][1] = x32;
262  m[2][2] = x33;
263  }
264 
265 void Mat3::assign (double x[3][3])
266  {
267  int i, j;
268 
269  for (i=0; i<3; ++i)
270  for (j=0; j<3; ++j) m[i][j] = x[i][j];
271  }
272 
273 void Mat3::PutMij (double x, int i, int j)
274  {
275  if ((i>0) && (i<4) && (j>0) && (j<4)) m[i-1][j-1] = x;
276  }
277 
278 double Mat3::GetMij (int i, int j)
279  {
280  double result;
281 
282  if ((i>0) && (i<4) && (j>0) && (j<4)) result = m[i-1][j-1];
283  else result = 0;
284  return result;
285  }
286 
287 
288 Mat3& Mat3::operator = (const Mat3& c)
289  {
290  int i, j;
291 
292  for (i=0; i<3; ++i)
293  for (j=0; j<3; ++j) m[i][j] = c.m[i][j];
294 
295  return (*this);
296  }
297 
298 Mat3& Mat3::operator += (const Mat3& c)
299  {
300  int i, j;
301 
302  for (i=0; i<3; ++i)
303  for (j=0; j<3; ++j) m[i][j] = m[i][j] + c.m[i][j];
304  return *this;
305  }
306 
307 Mat3& Mat3::operator -= (const Mat3& c)
308  {
309  int i, j;
310 
311  for (i=0; i<3; ++i)
312  for (j=0; j<3; ++j) m[i][j] = m[i][j] - c.m[i][j];
313  return *this;
314  }
315 
316 Mat3& Mat3::operator *= (const Mat3& c)
317  {
318  int i, j, k;
319  double r;
320  Mat3 b;
321 
322  for (i=0; i<3; ++i)
323  for (j=0; j<3; ++j)
324  {
325  r = 0;
326  for (k=0; k<3; ++k) r = r + c.m[i][k] * m[k][j];
327  b.m[i][j] = r;
328  }
329 
330  for (i=0; i<3; ++i)
331  for (j=0; j<3; ++j) m[i][j] = b.m[i][j];
332 
333  return *this;
334  }
335 
336 Mat3& Mat3::operator *= (double r)
337  {
338  int i, j;
339 
340  for (i=0; i<3; ++i)
341  for (j=0; j<3; ++j) m[i][j] = r*m[i][j];
342  return *this;
343  }
344 
345 Mat3& Mat3::operator /= (double r)
346  {
347  int i, j;
348  double q;
349 
350  if (r < 1E-100) q = 0.0;
351  else q = 1.0 / r;
352 
353  for (i=0; i<3; ++i)
354  for (j=0; j<3; ++j) m[i][j] = m[i][j] * q;
355  return *this;
356  }
357 
358 Mat3 mxcon (double r) // constant matrix with all elements of value r
359  {
360  Mat3 result;
361  int i, j;
362 
363  for (i=0; i<3; ++i)
364  for (j=0; j<3; ++j) result.m[i][j] = r;
365 
366  return result;
367  }
368 
369 Mat3 mxidn () // identity matrix
370  {
371  Mat3 result;
372  int i;
373 
374  result = mxcon (0);
375  for (i=0; i<3; ++i) result.m[i][i] = 1.0;
376 
377  return result;
378  }
379 
380 Mat3 mxtrn (const Mat3& m1) // returns transposed of matrix m1
381  {
382  Mat3 result;
383  int i, j;
384 
385  for (i=0; i<3; ++i)
386  for (j=0; j<3; ++j) result.m[i][j] = m1.m[j][i];
387 
388  return result;
389  }
390 
391 double mxdet (const Mat3& c) // returns determinant of matrix m1
392  {
393  double result;
394 
395  result = c.m[0][0]*c.m[1][1]*c.m[2][2] + c.m[0][1]*c.m[1][2]*c.m[2][0]
396  + c.m[0][2]*c.m[1][0]*c.m[2][1] - c.m[0][2]*c.m[1][1]*c.m[2][0]
397  - c.m[0][0]*c.m[1][2]*c.m[2][1] - c.m[0][1]*c.m[1][0]*c.m[2][2];
398 
399  return result;
400  }
401 
402 Mat3 operator + (const Mat3& c1, const Mat3& c2)
403  {
404  Mat3 result;
405  int i, j;
406 
407  for (i=0; i<3; ++i)
408  for (j=0; j<3; ++j) result.m[i][j] = c1.m[i][j] + c2.m[i][j];
409  return result;
410  }
411 
412 Mat3 operator - (const Mat3& c1, const Mat3& c2)
413  {
414  Mat3 result;
415  int i, j;
416 
417  for (i=0; i<3; ++i)
418  for (j=0; j<3; ++j) result.m[i][j] = c1.m[i][j] - c2.m[i][j];
419  return result;
420  }
421 
422 Mat3 operator * (double r, const Mat3& c1)
423  {
424  Mat3 result;
425  int i, j;
426 
427  for (i=0; i<3; ++i)
428  for (j=0; j<3; ++j) result.m[i][j] = c1.m[i][j] * r;
429  return result;
430  }
431 
432 
433 Mat3 operator * (const Mat3& c1, double r)
434  {
435  int i, j;
436  Mat3 result;
437 
438  for (i=0; i<3; ++i)
439  for (j=0; j<3; ++j) result.m[i][j] = c1.m[i][j] * r;
440  return result;
441  }
442 
443 Mat3 operator * (const Mat3& c1, const Mat3& c2)
444  {
445  int i, j, k;
446  double r;
447  Mat3 result;
448 
449  for (i=0; i<3; ++i)
450  for (j=0; j<3; ++j)
451  {
452  r = 0;
453  for (k=0; k<3; k++) r = r + c1.m[i][k] * c2.m[k][j];
454  result.m[i][j] = r;
455  };
456 
457  return result;
458  }
459 
460 Mat3 operator / (const Mat3& c1, double r)
461  {
462  Mat3 result;
463  int i, j;
464  double q;
465 
466  if (r < 1E-100) q = 0.0;
467  else q = 1.0 / r;
468 
469  for (i=0; i<3; ++i)
470  for (j=0; j<3; ++j) result.m[i][j] = c1.m[i][j] * q;
471  return result;
472  }
473 
474 Vec3 mxvct (const Mat3& m1, Vec3& v1)
475  {
476  int i, j;
477  double r;
478  Vec3 result;
479 
480  for (i=0; i<3; ++i)
481  {
482  r = 0;
483  for (j=0; j<3; ++j) r = r + m1.m[i][j] * v1[j];
484  result[i] = r;
485  };
486  return result;
487  }
488 
489 Mat3 xrot (double a)
490  {
491  // Rotation matrix around x-axis with angle a (in radians).
492  double c, s;
493  Mat3 m1;
494 
495  c = cos (a);
496  s = sin (a);
497  m1.m[0][0] = 1.0;
498  m1.m[0][1] = 0.0;
499  m1.m[0][2] = 0.0;
500  m1.m[1][0] = 0.0;
501  m1.m[1][1] = c;
502  m1.m[1][2] = s;
503  m1.m[2][0] = 0.0;
504  m1.m[2][1] = -s;
505  m1.m[2][2] = c;
506 
507  return m1;
508  }
509 
510 Mat3 yrot (double a)
511  {
512  // Rotation matrix around y-axis with angle a (in radians).
513  double c, s;
514  Mat3 m1;
515 
516  c = cos (a);
517  s = sin (a);
518  m1.m[0][0] = c;
519  m1.m[0][1] = 0.0;
520  m1.m[0][2] = -s;
521  m1.m[1][0] = 0.0;
522  m1.m[1][1] = 1.0;
523  m1.m[1][2] = 0.0;
524  m1.m[2][0] = s;
525  m1.m[2][1] = 0.0;
526  m1.m[2][2] = c;
527 
528  return m1;
529  }
530 
531 Mat3 zrot (double a)
532  {
533  // Rotation matrix around z-axis with angle a (in radians).
534  double c, s;
535  Mat3 m1;
536 
537  c = cos (a);
538  s = sin (a);
539  m1.m[0][0] = c;
540  m1.m[0][1] = s;
541  m1.m[0][2] = 0.0;
542  m1.m[1][0] = -s;
543  m1.m[1][1] = c;
544  m1.m[1][2] = 0.0;
545  m1.m[2][0] = 0.0;
546  m1.m[2][1] = 0.0;
547  m1.m[2][2] = 1.0;
548 
549  return m1;
550  }
551 
552 Mat3 csmx (double p, double y, double r)
553  {
554  // Form cosine matrix m from pitch p, yaw y and roll r angles.
555  // The angles are to be given in radians.
556  // Roll is rotation about the x-axis, pitch about y, yaw about z.
557  //
558  Mat3 pitch, yaw, roll, result;
559 
560  pitch = yrot (p);
561  yaw = zrot (y);
562  roll = xrot (r);
563  result = yaw * pitch;
564  result *= roll;
565 
566  return result;
567  }
568 
569 void gpyr (const Mat3& m1, double& p, double& y, double& r)
570  {
571  // Get pitch p, yaw y and roll r angles (in radians) from
572  // cosine matrix m1.
573 
574  y = asin (m1.m[0][1]);
575  r = atan20 (-m1.m[2][1], m1.m[1][1]);
576  p = atan20 (-m1.m[0][2], m1.m[0][0]);
577  }
578 
579 void vcpy (Vec3& v, double& p, double& y)
580  {
581  // Convert direction given by cartesion vector v into a corresponding
582  // pitch (p) / yaw (y) sequence. The angles are in radians.
583 
584  p = atan20 (-v[2], v[0]);
585  y = atan20 (v[1], sqrt (v[0]*v[0] + v[2]*v[2]));
586  }
587 
588 void vcrp (Vec3& v, double& p, double& r)
589  {
590  // Convert direction given by cartesian vector v into a corresponding
591  // roll (r) / pitch (p) sequence. The angles are in radians.
592 
593  r = atan20 (v[1], -v[2]);
594  p = M_PI / 2.0 - atan20 (v[0], sqrt (v[1]*v[1] + v[2]*v[2]));
595  }
596 
597 void mxevc (const Mat3& m, double& a, Vec3& v)
598  {
599  // Get eigenvalue a and eigenvector v from cosine matrix m.
600  // The eigenangle a is in radians.
601 
602  double ri, rj, rk, q1, q2, q3, q4;
603 
604  // using the 3-1-3 rotation matrix, first get the corresponding
605  // angles ri, rj, rk of rotation about the x-, y-, z-axis.
606  ri = atan20 (m.m[2][0], -m.m[2][1]);
607  rj = 0.5 * acos (m.m[2][2]);
608  rk = atan20 (m.m[0][2], m.m[1][2]);
609 
610  // now convert to quaternions
611  q4 = sin (rj);
612  q1 = q4 * cos (0.5 * (ri - rk));
613  q2 = q4 * sin (0.5 * (ri - rk));
614  q4 = cos (rj);
615  q3 = q4 * sin (0.5 * (ri + rk));
616  q4 = q4 * cos (0.5 * (ri + rk));
617 
618  // now get the eigen angle and eigen vector
619  v.assign(q1, q2, q3);
620  ri = abs (v);
621  if (ri == 0)
622  {
623  // treat singularity for 3-1-3 matrix
624  v.assign (0.0, 0.0, 1.0);
625  q4 = 0.5 * sqrt (1.0 + m.m[0][0] + m.m[1][1] + m.m[2][2]);
626  }
627  else v /= ri;
628 
629  a = 2.0 * acos (q4);
630  }
631 
632 Mat3 mxrox (double& a, Vec3& v)
633  {
634  // Convert eigenvalue a (eigen angle in radians) and eigenvector v
635  // into a corresponding cosine rotation matrix m.
636 
637  double q1, q2, q3, q4, q12, q22, q32, q42;
638  Mat3 result;
639 
640  // calculate quaternions and their squares
641  q4 = sin ( 0.5 * a);
642  q1 = v[0] * q4;
643  q2 = v[1] * q4;
644  q3 = v[2] * q4;
645  q4 = cos (0.5 * a);
646  q12 = q1 * q1;
647  q22 = q2 * q2;
648  q32 = q3 * q3;
649  q42 = q4 * q4;
650 
651  // now get the matrix elements
652  result.assign ((q12 - q22 - q32 + q42), (2.0 * (q1*q2 + q3*q4)),
653  (2.0 * (q1*q3 - q2*q4)), (2.0 * (q1*q2 - q3*q4)),
654  (-q12 + q22 - q32 + q42),(2.0 * (q2*q3 + q1*q4)),
655  (2.0 * (q1*q3 + q2*q4)), (2.0 * (q2*q3 - q1*q4)),
656  (-q12 - q22 + q32 + q42));
657 
658  return result;
659  }
660 
661 
662 ostream& operator << (ostream& os, const Mat3& c)
663  {
664  os << "[" << c.m[0][0] << "," << c.m[0][1] << "," << c.m[0][2] << "]" << endl
665  << "[" << c.m[1][0] << "," << c.m[1][1] << "," << c.m[1][2] << "]" << endl
666  << "[" << c.m[2][0] << "," << c.m[2][1] << "," << c.m[2][2] << "]" << endl;
667  return os;
668  }
669 
Mat3::GetMij
double GetMij(int i, int j)
Definition: attlib.cpp:278
Vec3::operator[]
double & operator[](unsigned index)
Definition: attlib.cpp:52
Mat3
Definition: attlib.h:62
Vec3
Definition: attlib.h:26
Mat3::operator-=
Mat3 & operator-=(const Mat3 &c)
Definition: attlib.cpp:307
vcpy
void vcpy(Vec3 &v, double &p, double &y)
Definition: attlib.cpp:579
yrot
Mat3 yrot(double a)
Definition: attlib.cpp:510
atan20
double atan20(double y, double x)
Definition: attlib.cpp:26
operator/
Vec3 operator/(const Vec3 &c1, double r)
Definition: attlib.cpp:160
operator-
Vec3 operator-(const Vec3 &c1, const Vec3 &c2)
Definition: attlib.cpp:125
Mat3::operator+=
Mat3 & operator+=(const Mat3 &c)
Definition: attlib.cpp:298
gpyr
void gpyr(const Mat3 &m1, double &p, double &y, double &r)
Definition: attlib.cpp:569
carpol
Vec3 carpol(const Vec3 &c)
Definition: attlib.cpp:185
vnorm
Vec3 vnorm(const Vec3 &c)
Definition: attlib.cpp:171
attlib.h
zrot
Mat3 zrot(double a)
Definition: attlib.cpp:531
Mat3::Mat3
Mat3(double x=0)
Definition: attlib.cpp:234
operator+
Vec3 operator+(const Vec3 &c1, const Vec3 &c2)
Definition: attlib.cpp:117
Mat3::assign
void assign(double x11, double x12, double x13, double x21, double x22, double x23, double x31, double x32, double x33)
Definition: attlib.cpp:250
Mat3::operator=
Mat3 & operator=(const Mat3 &c)
Definition: attlib.cpp:288
vcrp
void vcrp(Vec3 &v, double &p, double &r)
Definition: attlib.cpp:588
mxcon
Mat3 mxcon(double r)
Definition: attlib.cpp:358
abs
double abs(const Vec3 &c)
Definition: attlib.cpp:101
Vec3::operator*=
Vec3 & operator*=(const Vec3 &c)
Definition: attlib.cpp:75
Mat3::operator*=
Mat3 & operator*=(const Mat3 &c)
Definition: attlib.cpp:316
mxrox
Mat3 mxrox(double &a, Vec3 &v)
Definition: attlib.cpp:632
mxevc
void mxevc(const Mat3 &m, double &a, Vec3 &v)
Definition: attlib.cpp:597
Mat3::m
double m[3][3]
Definition: attlib.h:65
mxdet
double mxdet(const Mat3 &c)
Definition: attlib.cpp:391
mxtrn
Mat3 mxtrn(const Mat3 &m1)
Definition: attlib.cpp:380
csmx
Mat3 csmx(double p, double y, double r)
Definition: attlib.cpp:552
operator<<
ostream & operator<<(ostream &os, const Vec3 &c)
Definition: attlib.cpp:226
Vec3::operator/=
Vec3 & operator/=(double r)
Definition: attlib.cpp:91
operator*
Vec3 operator*(double r, const Vec3 &c1)
Definition: attlib.cpp:134
Mat3::operator/=
Mat3 & operator/=(double r)
Definition: attlib.cpp:345
Vec3::operator-=
Vec3 & operator-=(const Vec3 &c)
Definition: attlib.cpp:69
Vec3::assign
void assign(double x=0, double y=0, double z=0)
Definition: attlib.cpp:47
M_PI
#define M_PI
Definition: GeoDataCoordinates.h:26
mxidn
Mat3 mxidn()
Definition: attlib.cpp:369
xrot
Mat3 xrot(double a)
Definition: attlib.cpp:489
Vec3::operator+=
Vec3 & operator+=(const Vec3 &c)
Definition: attlib.cpp:63
Vec3::operator=
Vec3 & operator=(const Vec3 &c)
Definition: attlib.cpp:57
dot
double dot(const Vec3 &c1, const Vec3 &c2)
Definition: attlib.cpp:109
polcar
Vec3 polcar(const Vec3 &c)
Definition: attlib.cpp:208
mxvct
Vec3 mxvct(const Mat3 &m1, Vec3 &v1)
Definition: attlib.cpp:474
Vec3::Vec3
Vec3(double x=0, double y=0, double z=0)
Definition: attlib.cpp:38
Mat3::PutMij
void PutMij(double x, int i, int j)
Definition: attlib.cpp:273
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:38:49 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

marble

Skip menu "marble"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • kstars
  • libkdeedu
  •   keduvocdocument
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal