00001
00005 #pragma once
00006
00007 #include <usml/waveq3d/wave_queue.h>
00008
00009 namespace usml {
00010 namespace waveq3d {
00011
00012 using namespace usml::ocean ;
00013 class wave_queue ;
00014
00045 class USML_DECLSPEC reflection_model
00046 {
00047
00048 friend class wave_queue ;
00049
00050 private:
00051
00053 wave_queue& _wave ;
00054
00068 const double TOO_SHALLOW ;
00069
00081 static const double MIN_REFLECT ;
00082
00086 reflection_model( wave_queue& wave )
00087 : _wave( wave ),
00088 TOO_SHALLOW( 300.0 * wave._time_step )
00089 {}
00090
00091 virtual ~reflection_model() {}
00092
00137 bool bottom_reflection( size_t de, size_t az, double depth ) ;
00138
00173 bool surface_reflection( size_t de, size_t az ) ;
00174
00189 void collision_location(
00190 size_t de, size_t az, double dtime,
00191 wposition1* position, wvector1* ndirection, double* speed ) const ;
00192
00207 void reflection_reinit(
00208 size_t de, size_t az, double dtime,
00209 const wposition1& position, const wvector1& direction, double speed ) ;
00210
00221 static void reflection_copy(
00222 wave_front* element, size_t de, size_t az,
00223 wave_front& results ) ;
00224 } ;
00225
00226 }
00227 }