FineKernelToolKit: FK/Vector.h ソースファイル

FineKernelToolKit 4.3.0

読み取り中…
検索中…
一致する文字列を見つけられません
Vector.h
[詳解]
1#if !defined(__FK_VECTOR_HEADER__)
2#define __FK_VECTOR_HEADER__
3
4#include <FK/Base.h>
5#include <string>
6#include <vector>
7
8#if defined(OPENGL4)
9#include <FK/OpenGL.hh>
10#else
11 using GLfloat = float;
12#endif
13
14namespace FK {
16 enum class fk_Axis {
17 X,
18 Y,
19 Z
20 };
21
22 class fk_OrthoMatrix;
23 class fk_Matrix;
24 class fk_FVector;
25
27
44
45 class fk_Vector {
46
47 public:
48 static constexpr double VECTOREPS = 1.0e-12;
49 static constexpr double MATRIXEPS = 1.0e-12;
50 static constexpr double MATRIXEPS2 = 1.0e-16;
51
52 double x;
53 double y;
54 double z;
55
57
62 explicit fk_Vector(double x = 0.0, double y = 0.0, double z = 0.0);
63
65 fk_Vector(const fk_Vector &);
66
68 fk_Vector(const fk_FVector &);
69
71 virtual ~fk_Vector() {}
72
75
77
82 fk_Vector & operator -(void) const;
83
85
88
90
101 bool operator ==(const fk_Vector &) const;
102
104
115 bool operator !=(const fk_Vector &) const;
116
118
129 bool operator >(const fk_Vector &) const;
130
132
143 bool operator <(const fk_Vector &) const;
144
146
149 bool operator >=(const fk_Vector &) const;
150
152
155 bool operator <=(const fk_Vector &) const;
156
158
161
163 fk_Vector & operator =(const fk_Vector &);
164
166 fk_Vector & operator =(const fk_FVector &);
167
169
179 fk_Vector & operator *=(double);
180
182
194 fk_Vector & operator /=(double);
195
197
207 fk_Vector & operator +=(const fk_Vector &);
208
210
220 fk_Vector & operator -=(const fk_Vector &);
221
223
233 fk_Vector & operator ^=(const fk_Vector &);
234
236
249 fk_Vector & operator *=(const fk_Matrix &);
250
252
265 fk_Vector & operator *=(const fk_OrthoMatrix &);
267
270
272
278 virtual void set(double x, double y, double z = 0.0);
279
281
290 double dist(void) const;
291
293
303 double dist2(void) const;
304
306
319 bool normalize(void);
320
322
325 virtual void init(void);
326
328
331 bool isZero(void) const;
332
334
349 fk_Vector proj(const fk_Vector &Q) const;
350
352
360 fk_Vector perp(const fk_Vector &Q) const;
361
362#if !defined(FK_DOXYGEN_USER_PROCESS)
363
364 virtual std::string OutStr(void) const;
365 virtual void Print(void) const;
366 virtual void Print(std::string) const;
367
368#endif
369
372
373 friend double operator *(const fk_Vector &, const fk_Vector &);
374 friend fk_Vector operator +(const fk_Vector &, const fk_Vector &);
375 friend fk_Vector operator -(const fk_Vector &, const fk_Vector &);
376 friend fk_Vector operator *(const fk_Vector &, double);
377 friend fk_Vector operator *(double, const fk_Vector &);
378 friend fk_Vector operator /(const fk_Vector &, double);
379 friend fk_Vector operator ^(const fk_Vector &, const fk_Vector &);
380
382 };
383
384
386
401 double operator *(const fk_Vector &, const fk_Vector &);
402
404
412 fk_Vector operator +(const fk_Vector &, const fk_Vector &);
413
415
423 fk_Vector operator -(const fk_Vector &, const fk_Vector &);
424
426
434 fk_Vector operator *(const fk_Vector &, double);
435
437
445 fk_Vector operator *(double, const fk_Vector &);
446
448
454 fk_Vector operator /(const fk_Vector &, double);
455
457
484 fk_Vector operator ^(const fk_Vector &, const fk_Vector &);
485
487
496
497 class fk_HVector: public fk_Vector {
498 public:
499 double w;
500
502 fk_HVector(void);
503
505
509 fk_HVector(const fk_Vector &v, double w = 1.0);
510
512
518 fk_HVector(double x, double y, double z, double w = 1.0);
519
521 virtual ~fk_HVector() {}
522
524 fk_HVector(const fk_HVector &);
525
528
530
542 bool operator ==(const fk_HVector &) const;
543
545
557 bool operator !=(const fk_HVector &) const;
559
562
564 fk_HVector & operator =(const fk_HVector &);
565
567
570 fk_HVector & operator =(const fk_Vector &);
571
573
583 fk_HVector & operator *=(const fk_Matrix &);
584
586
596 fk_HVector & operator *=(const fk_OrthoMatrix &);
597
599
602
604
611 void set(const fk_Vector &v);
612
614
621 void set(const fk_Vector &v, double w);
622
624
632 void set(double x, double y, double z = 0.0);
633
635
642 void set(double x, double y, double z, double w);
643
645
650 void setw(double w);
651
653
657 fk_Vector getV(void) const;
658
660
664 double getw(void) const;
665
667
671 void ispos(void);
672
674
678 void isvec(void);
679
681
684 void init(void);
685
686#if !defined(FK_DOXYGEN_USER_PROCESS)
687
688 std::string OutStr(void) const;
689 void Print(void) const;
690 void Print(std::string) const;
691
692#endif
693
696
697 friend double operator *(const fk_HVector &, const fk_HVector &);
698 friend fk_HVector operator *(const fk_Matrix &, const fk_HVector &);
699 friend fk_HVector operator *(const fk_OrthoMatrix &, const fk_HVector &);
700
702 };
703
704
706
716 double operator *(const fk_HVector &, const fk_HVector &);
717
719
729 fk_HVector operator *(const fk_Matrix &, const fk_HVector &);
730
732
742 fk_HVector operator *(const fk_OrthoMatrix &, const fk_HVector &);
743
744
746
759
760 class fk_FVector {
761 public:
762 float x;
763 float y;
764 float z;
765
767 fk_FVector(void);
768
770 fk_FVector(const fk_FVector &);
771
773
777 fk_FVector(const fk_Vector &);
778
780
784 fk_FVector & operator =(const fk_Vector &);
785 };
786
788
798
799 class fk_TexCoord {
800
801 public:
802
803 float x;
804 float y;
805
807
811 fk_TexCoord(double x, double y);
812
814
818 fk_TexCoord(float x = 0.0f, float y = 0.0f);
819
821 fk_TexCoord(const fk_TexCoord &);
822
824 fk_TexCoord & operator =(const fk_TexCoord &);
825
827
838 bool operator ==(const fk_TexCoord &) const;
839
841
852 bool operator !=(const fk_TexCoord &) const;
853
855
861 void set(double x, double y);
862
864
870 void set(float x, float y);
871 };
872}
873
874#endif /* !__FK_VECTOR_HEADER__ */
875
876/****************************************************************************
877 *
878 * Copyright (c) 1999-2024, Fine Kernel Project, All rights reserved.
879 *
880 * Redistribution and use in source and binary forms,
881 * with or without modification, are permitted provided that the
882 * following conditions are met:
883 *
884 * - Redistributions of source code must retain the above
885 * copyright notice, this list of conditions and the
886 * following disclaimer.
887 *
888 * - Redistributions in binary form must reproduce the above
889 * copyright notice, this list of conditions and the
890 * following disclaimer in the documentation and/or
891 * other materials provided with the distribution.
892 *
893 * - Neither the name of the copyright holders nor the names
894 * of its contributors may be used to endorse or promote
895 * products derived from this software without specific
896 * prior written permission.
897 *
898 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
899 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
900 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
901 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
902 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
903 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
904 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
905 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
906 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
907 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
908 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
909 * POSSIBILITY OF SUCH DAMAGE.
910 *
911 ****************************************************************************/
912/****************************************************************************
913 *
914 * Copyright (c) 1999-2024, Fine Kernel Project, All rights reserved.
915 *
916 * 本ソフトウェアおよびソースコードのライセンスは、基本的に
917 * 「修正 BSD ライセンス」に従います。以下にその詳細を記します。
918 *
919 * ソースコード形式かバイナリ形式か、変更するかしないかを問わず、
920 * 以下の条件を満たす場合に限り、再頒布および使用が許可されます。
921 *
922 * - ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、
923 * および下記免責条項を含めること。
924 *
925 * - バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の
926 * 資料に、上記の著作権表示、本条件一覧、および下記免責条項を
927 * 含めること。
928 *
929 * - 書面による特別の許可なしに、本ソフトウェアから派生した製品の
930 * 宣伝または販売促進に、本ソフトウェアの著作権者の名前または
931 * コントリビューターの名前を使用してはならない。
932 *
933 * 本ソフトウェアは、著作権者およびコントリビューターによって「現
934 * 状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、
935 * および特定の目的に対する適合性に関す暗黙の保証も含め、またそれ
936 * に限定されない、いかなる保証もないものとします。著作権者もコン
937 * トリビューターも、事由のいかんを問わず、損害発生の原因いかんを
938 * 問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その
939 * 他の)不法行為であるかを問わず、仮にそのような損害が発生する可
940 * 能性を知らされていたとしても、本ソフトウェアの使用によって発生
941 * した(代替品または代用サービスの調達、使用の喪失、データの喪失、
942 * 利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、
943 * 間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害に
944 * ついて、一切責任を負わないものとします。
945 *
946 ****************************************************************************/
Base.h
GLfloat
float GLfloat
Definition Vector.h:11
FK::fk_FVector
単精度浮動小数点型3次元ベクトルを管理するクラス
Definition Vector.h:760
FK::fk_FVector::fk_FVector
fk_FVector(const fk_Vector &)
コピーコンストラクタ2
FK::fk_FVector::fk_FVector
fk_FVector(const fk_FVector &)
コピーコンストラクタ1
FK::fk_FVector::x
float x
x成分
Definition Vector.h:762
FK::fk_FVector::z
float z
z成分
Definition Vector.h:764
FK::fk_FVector::fk_FVector
fk_FVector(void)
コンストラクタ
FK::fk_FVector::operator=
fk_FVector & operator=(const fk_Vector &)
代入演算子
FK::fk_FVector::y
float y
y成分
Definition Vector.h:763
FK::fk_HVector
4次元ベクトルを管理するクラス
Definition Vector.h:497
FK::fk_HVector::set
void set(double x, double y, double z=0.0)
数値による設定関数1
FK::fk_HVector::setw
void setw(double w)
同次座標設定関数
FK::fk_HVector::init
void init(void)
初期化関数
FK::fk_HVector::fk_HVector
fk_HVector(const fk_HVector &)
コピーコンストラクタ
FK::fk_HVector::set
void set(const fk_Vector &v, double w)
fk_Vector による設定関数2
FK::fk_HVector::operator!=
bool operator!=(const fk_HVector &) const
異値比較演算子
FK::fk_HVector::w
double w
同次座標成分
Definition Vector.h:499
FK::fk_HVector::fk_HVector
fk_HVector(const fk_Vector &v, double w=1.0)
コンストラクタ2
FK::fk_HVector::operator=
fk_HVector & operator=(const fk_HVector &)
単純代入演算子
FK::fk_HVector::ispos
void ispos(void)
位置ベクトル設定関数
FK::fk_HVector::~fk_HVector
virtual ~fk_HVector()
デストラクタ
Definition Vector.h:521
FK::fk_HVector::operator==
bool operator==(const fk_HVector &) const
同値比較演算子
FK::fk_HVector::getV
fk_Vector getV(void) const
3次元ベクトル取得関数
FK::fk_HVector::set
void set(const fk_Vector &v)
fk_Vector による設定関数1
FK::fk_HVector::operator*
friend double operator*(const fk_HVector &, const fk_HVector &)
内積二項演算子
FK::fk_HVector::operator*=
fk_HVector & operator*=(const fk_Matrix &)
行列変換代入演算子1
FK::fk_HVector::isvec
void isvec(void)
方向ベクトル設定関数
FK::fk_HVector::getw
double getw(void) const
同次座標値取得関数
FK::fk_HVector::fk_HVector
fk_HVector(double x, double y, double z, double w=1.0)
コンストラクタ3
FK::fk_HVector::fk_HVector
fk_HVector(void)
コンストラクタ1
FK::fk_HVector::set
void set(double x, double y, double z, double w)
数値による設定関数2
FK::fk_Matrix
一般4元正方行列を管理するクラス
Definition Matrix.h:549
FK::fk_OrthoMatrix
4元正方直交行列を管理するクラス
Definition Matrix.h:40
FK::fk_TexCoord::fk_TexCoord
fk_TexCoord(const fk_TexCoord &)
コピーコンストラクタ
FK::fk_TexCoord::operator==
bool operator==(const fk_TexCoord &) const
同値比較演算子
FK::fk_TexCoord::fk_TexCoord
fk_TexCoord(float x=0.0f, float y=0.0f)
コンストラクタ2
FK::fk_TexCoord::set
void set(double x, double y)
成分設定関数1
FK::fk_TexCoord::fk_TexCoord
fk_TexCoord(double x, double y)
コンストラクタ1
FK::fk_TexCoord::operator!=
bool operator!=(const fk_TexCoord &) const
異値比較演算子
FK::fk_TexCoord::operator=
fk_TexCoord & operator=(const fk_TexCoord &)
代入演算子
FK::fk_TexCoord::x
float x
x成分
Definition Vector.h:803
FK::fk_TexCoord::y
float y
y成分
Definition Vector.h:804
FK::fk_TexCoord::set
void set(float x, float y)
成分設定関数2
FK::fk_Vector
3次元ベクトルを管理するクラス
Definition Vector.h:45
FK::fk_Vector::fk_Vector
fk_Vector(const fk_Vector &)
コピーコンストラクタ
FK::fk_Vector::isZero
bool isZero(void) const
零ベクトル判定関数
FK::fk_Vector::proj
fk_Vector proj(const fk_Vector &Q) const
射影ベクトル算出関数
FK::fk_Vector::z
double z
z成分
Definition Vector.h:54
FK::fk_Vector::operator+=
fk_Vector & operator+=(const fk_Vector &)
単項和代入演算子
FK::fk_Vector::operator/
friend fk_Vector operator/(const fk_Vector &, double)
実数商二項演算子
FK::fk_Vector::operator==
bool operator==(const fk_Vector &) const
同値比較演算子
FK::fk_Vector::operator!=
bool operator!=(const fk_Vector &) const
異値比較演算子
FK::fk_Vector::y
double y
y成分
Definition Vector.h:53
FK::fk_Vector::operator+
friend fk_Vector operator+(const fk_Vector &, const fk_Vector &)
ベクトル和二項演算子
FK::fk_Vector::operator<=
bool operator<=(const fk_Vector &) const
等価左不等号演算子
FK::fk_Vector::operator/=
fk_Vector & operator/=(double)
実数商代入演算子
FK::fk_Vector::set
virtual void set(double x, double y, double z=0.0)
成分設定関数1
FK::fk_Vector::operator*
friend double operator*(const fk_Vector &, const fk_Vector &)
内積二項演算子
FK::fk_Vector::~fk_Vector
virtual ~fk_Vector()
デストラクタ
Definition Vector.h:71
FK::fk_Vector::operator^
friend fk_Vector operator^(const fk_Vector &, const fk_Vector &)
外積二項演算子
FK::fk_Vector::fk_Vector
fk_Vector(const fk_FVector &)
コピーコンストラクタ
FK::fk_Vector::dist
double dist(void) const
ベクトル長さ算出関数
FK::fk_Vector::MATRIXEPS
static constexpr double MATRIXEPS
行列演算用誤差1
Definition Vector.h:49
FK::fk_Vector::VECTOREPS
static constexpr double VECTOREPS
ベクトル演算誤差基準値
Definition Vector.h:48
FK::fk_Vector::dist2
double dist2(void) const
ベクトル長さ平方算出関数
FK::fk_Vector::operator>=
bool operator>=(const fk_Vector &) const
等価右不等号演算子
FK::fk_Vector::normalize
bool normalize(void)
正規化関数
FK::fk_Vector::operator<
bool operator<(const fk_Vector &) const
左不等号演算子
FK::fk_Vector::operator=
fk_Vector & operator=(const fk_Vector &)
単純代入演算子
FK::fk_Vector::fk_Vector
fk_Vector(double x=0.0, double y=0.0, double z=0.0)
コンストラクタ
FK::fk_Vector::operator*=
fk_Vector & operator*=(double)
実数積代入演算子
FK::fk_Vector::operator^=
fk_Vector & operator^=(const fk_Vector &)
単項外積代入演算子
FK::fk_Vector::operator-
fk_Vector & operator-(void) const
単項マイナス演算子
FK::fk_Vector::operator>
bool operator>(const fk_Vector &) const
右不等号演算子
FK::fk_Vector::x
double x
x成分
Definition Vector.h:52
FK::fk_Vector::operator-=
fk_Vector & operator-=(const fk_Vector &)
単項差代入演算子
FK::fk_Vector::MATRIXEPS2
static constexpr double MATRIXEPS2
行列演算用誤差2
Definition Vector.h:50
FK::fk_Vector::init
virtual void init(void)
初期化関数
FK::fk_Vector::perp
fk_Vector perp(const fk_Vector &Q) const
射影垂直成分ベクトル算出関数
FK
Fine Kernel Toolkit 名前空間
Definition Angle.h:6
FK::operator+
fk_Color operator+(const fk_Color &, const fk_Color &)
色要素和二項演算子
FK::operator/
fk_Color operator/(const fk_Color &, double)
実数商二項演算子
FK::fk_Axis
fk_Axis
座標軸を表す列挙型
Definition Vector.h:16
FK::fk_Axis::X
@ X
x軸
Definition Vector.h:17
FK::fk_Axis::Z
@ Z
z軸
Definition Vector.h:19
FK::fk_Axis::Y
@ Y
y軸
Definition Vector.h:18
FK::operator^
fk_Draw operator^(fk_Draw, fk_Draw)
描画モード用ビット XOR 演算子
FK::operator-
fk_Color operator-(const fk_Color &, const fk_Color &)
色要素差二項演算子
FK::operator*
fk_Color operator*(const fk_Color &, double)
実数倍二項演算子1