FineKernelToolKit 4.2.13
読み取り中…
検索中…
一致する文字列を見つけられません
Ray.h
[詳解]
1#if !defined(__FK_RAY_HEADER__)
2#define __FK_RAY_HEADER__
3
4#include <FK/Model.h>
5#include <FK/Line.h>
6#include <FK/Plane.h>
7#include <FK/Math.h>
8
9namespace FK {
11
25 class fk_Ray : public fk_BaseObject {
26
27#if !defined(FK_DOXYGEN_USER_PROCESS)
28 class Member {
29 public:
30 fk_Vector sPos, ePos;
31 std::vector<fk_Plane> plane;
32 std::vector<double> range;
33 std::unique_ptr<fk_Model> model;
34 std::unique_ptr<fk_Line> line;
35 fk_LineType type;
36 double drawScale;
37 std::list<fk_Model*> interList;
38
39 Member(fk_Vector, fk_Vector);
40 ~Member();
41 };
42#endif
43
44 public:
46
49 fk_Ray(void);
50
52
61
64
66
76
78
87
89
98
100
105 std::tuple<fk_Vector, fk_Vector> get(void);
106
107
109
122
124
132
134
143 bool isInter(fk_Model* model);
144
146
161 std::tuple<bool, double> getInter(fk_Model* model);
162
164
178 fk_Vector getPos(double t);
179
181 /*
182 * 光線モデルを取得します。
183 * ここで得られるモデルインスタンスをウィンドウやシーンに登録することにより、
184 * 光線を描画することが可能です。
185 * また、 fk_Model クラスが持つ様々な機能を用いることや、
186 * 他のモデルと親子関係を構築することもできます。
187 *
188 * \return モデルインスタンス
189 */
191
193
201 void setParent(fk_Model* model);
202
204
209 void setColor(fk_Color* color);
210
212
219 void setColor(float r, float g, float b);
220
222
230
232
239 void setDrawScale(double scale);
240
242
247 double getDrawScale(void);
248
250
259 void entryModel(fk_Model* model);
260
262
269 void removeModel(fk_Model* model);
270
272
288 void getInterList(std::list<std::tuple<fk_Model*, double>>* list, bool sort = true);
289
290 private:
291 std::unique_ptr<Member> _m;
292
293 bool IsInterOpen(fk_Model*);
294 bool IsInterClose(fk_Model*);
295 bool IsInterHalf(fk_Model*);
296
297 std::tuple<bool, double> GetInterOpen(fk_Model*);
298 std::tuple<bool, double> GetInterClose(fk_Model*);
299 std::tuple<bool, double> GetInterHalf(fk_Model*);
300
301 bool CheckInterStart(fk_Model*);
302 bool CheckSphereInner(fk_Model*);
303 bool CheckAABBInner(fk_Model*);
304 bool CheckOBBInner(fk_Model*);
305 bool CheckCapsuleInner(fk_Model*);
306
307 std::tuple<bool, double> Sphere_Discriminant(fk_Model*);
308 std::tuple<bool, double, double> Box_Discriminant(void);
309 std::tuple<bool, double> Capsule_Discriminant(fk_Model*);
310 void MakeAABBPlane(fk_Model*);
311 void MakeOBBPlane(fk_Model*);
312 void MakePlaneRange(fk_Vector&, fk_Vector&, fk_Vector&,
314 double GetOpenParam(double, double);
315 std::tuple<bool, double> GetCloseParam(std::tuple<bool, double, double>);
316 void ChangeLine(fk_Vector&, fk_Vector&);
317 void MakeModel(void);
318 void MakeLine(void);
319
320 };
321}
322#endif // !__FK_RAY_HEADER__
323
324/****************************************************************************
325 *
326 * Copyright (c) 1999-2024, Fine Kernel Project, All rights reserved.
327 *
328 * Redistribution and use in source and binary forms,
329 * with or without modification, are permitted provided that the
330 * following conditions are met:
331 *
332 * - Redistributions of source code must retain the above
333 * copyright notice, this list of conditions and the
334 * following disclaimer.
335 *
336 * - Redistributions in binary form must reproduce the above
337 * copyright notice, this list of conditions and the
338 * following disclaimer in the documentation and/or
339 * other materials provided with the distribution.
340 *
341 * - Neither the name of the copyright holders nor the names
342 * of its contributors may be used to endorse or promote
343 * products derived from this software without specific
344 * prior written permission.
345 *
346 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
347 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
348 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
349 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
350 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
351 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
352 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
353 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
354 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
355 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
356 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
357 * POSSIBILITY OF SUCH DAMAGE.
358 *
359 ****************************************************************************/
360/****************************************************************************
361 *
362 * Copyright (c) 1999-2024, Fine Kernel Project, All rights reserved.
363 *
364 * 本ソフトウェアおよびソースコードのライセンスは、基本的に
365 * 「修正 BSD ライセンス」に従います。以下にその詳細を記します。
366 *
367 * ソースコード形式かバイナリ形式か、変更するかしないかを問わず、
368 * 以下の条件を満たす場合に限り、再頒布および使用が許可されます。
369 *
370 * - ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、
371 * および下記免責条項を含めること。
372 *
373 * - バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の
374 * 資料に、上記の著作権表示、本条件一覧、および下記免責条項を
375 * 含めること。
376 *
377 * - 書面による特別の許可なしに、本ソフトウェアから派生した製品の
378 * 宣伝または販売促進に、本ソフトウェアの著作権者の名前または
379 * コントリビューターの名前を使用してはならない。
380 *
381 * 本ソフトウェアは、著作権者およびコントリビューターによって「現
382 * 状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、
383 * および特定の目的に対する適合性に関す暗黙の保証も含め、またそれ
384 * に限定されない、いかなる保証もないものとします。著作権者もコン
385 * トリビューターも、事由のいかんを問わず、損害発生の原因いかんを
386 * 問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その
387 * 他の)不法行為であるかを問わず、仮にそのような損害が発生する可
388 * 能性を知らされていたとしても、本ソフトウェアの使用によって発生
389 * した(代替品または代用サービスの調達、使用の喪失、データの喪失、
390 * 利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、
391 * 間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害に
392 * ついて、一切責任を負わないものとします。
393 *
394 ****************************************************************************/
FK の各クラスの基盤となる基本クラス
Definition Base.h:113
RGB色を管理するクラス
Definition Color.h:21
モデルを生成、管理するクラス
Definition Model.h:98
干渉判定光線クラス
Definition Ray.h:25
fk_Ray(void)
コンストラクタ1
bool isInter(fk_Model *model)
干渉状態取得関数
void setDrawScale(double scale)
直線・半直線延長率設定関数
std::tuple< bool, double > getInter(fk_Model *model)
干渉位置取得関数
void setColor(float r, float g, float b)
光線色設定関数2
void setParent(fk_Model *model)
親モデル設定関数
std::tuple< fk_Vector, fk_Vector > get(void)
端点取得関数
void removeModel(fk_Model *model)
干渉判定対称モデル解除関数
double getDrawScale(void)
直線・半直線延長率取得関数
void entryModel(fk_Model *model)
干渉判定対象モデル登録関数
fk_Vector getPos(double t)
光線位置ベクトル取得関数
fk_Ray(fk_Vector S, fk_Vector E)
コンストラクタ2
void getInterList(std::list< std::tuple< fk_Model *, double > > *list, bool sort=true)
一括干渉判定関数
bool setStart(fk_Vector S)
始点設定関数
fk_LineType getType(void)
直線群種類取得関数
void setColor(fk_Color *color)
光線色設定関数1
bool set(fk_Vector S, fk_Vector E)
端点設定関数
void setType(fk_LineType type)
直線群種類選択関数
fk_Color * getColor(void)
光線色取得関数
bool setEnd(fk_Vector E)
終点設定関数
fk_Model * getModel(void)
モデルインスタンス取得関数
~fk_Ray()
デストラクタ
3次元ベクトルを管理するクラス
Definition Vector.h:45
Fine Kernel Toolkit 名前空間
Definition Angle.h:6
fk_LineType
fk_Math クラス内での直線群タイプを表す列挙型
Definition Math.h:10