Page History
HTML |
---|
<style type="text/css"> /* This file was automatically generated using Doc-O-Matic. */ pre { margin-top : 0px; margin-bottom : 0px; } .TableDiv { width: 100%; } table.Table0 { width: 100%; font-size: 8pt; } table.Table1 { width: 100%; font-size: 8pt; } .Element901 { color: #000000; margin-left : 0px; margin-right : 0px; margin-top : 0px; margin-bottom : 0px; border-left-style : none; border-top-style : none; padding-right : 0px; border-right-width : 1px; border-right-color : #AAAEBD; border-right-style : solid; border-bottom-style : none; text-align : left; overflow: hidden; } .Element900 { color: #000000; margin-left : 0px; margin-right : 0px; margin-top : 0px; margin-bottom : 0px; border-left-style : none; border-top-style : none; padding-right : 0px; border-right-width : 1px; border-right-color : #AAAEBD; border-right-style : solid; border-bottom-style : none; text-align : left; } a.Element875, a:visited.Element875, a:hover.Element875 { color: #000000; background-color: #EEEEEE; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; padding-left : 2px; border-left-width : 1px; border-left-color : #999999; border-left-style : solid; padding-top : 0px; border-top-width : 1px; border-top-color : #999999; border-top-style : solid; padding-right : 2px; border-right-width : 1px; border-right-color : #999999; border-right-style : solid; padding-bottom : 0px; border-bottom-width : 1px; border-bottom-color : #999999; border-bottom-style : solid; text-align : left; } a.Element874, a:visited.Element874, a:hover.Element874 { color: #000000; background-color: #EEEEEE; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-weight: bold; font-style: normal; text-decoration: none; padding-left : 2px; border-left-width : 1px; border-left-color : #999999; border-left-style : solid; padding-top : 1px; border-top-width : 1px; border-top-color : #999999; border-top-style : solid; padding-right : 2px; border-right-width : 1px; border-right-color : #999999; border-right-style : solid; padding-bottom : 1px; border-bottom-width : 1px; border-bottom-color : #999999; border-bottom-style : solid; text-align : left; } a:hover.Element862 { color: #000000; background-color: #EEEEEE; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; padding-left : 2px; border-left-width : 1px; border-left-color : #999999; border-left-style : solid; padding-top : 0px; border-top-width : 1px; border-top-color : #999999; border-top-style : solid; padding-right : 2px; border-right-width : 1px; border-right-color : #999999; border-right-style : solid; padding-bottom : 0px; border-bottom-width : 1px; border-bottom-color : #999999; border-bottom-style : solid; text-align : left; } a:hover.Element861 { color: #000000; background-color: #EEEEEE; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: italic; text-decoration: none; padding-left : 2px; border-left-width : 1px; border-left-color : #999999; border-left-style : solid; padding-top : 1px; border-top-width : 1px; border-top-color : #999999; border-top-style : solid; padding-right : 2px; border-right-width : 1px; border-right-color : #999999; border-right-style : solid; padding-bottom : 1px; border-bottom-width : 1px; border-bottom-color : #999999; border-bottom-style : solid; text-align : left; } a:hover.Element860 { color: #000000; background-color: #EEEEEE; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-weight: bold; font-style: normal; text-decoration: none; padding-left : 2px; border-left-width : 1px; border-left-color : #999999; border-left-style : solid; padding-top : 1px; border-top-width : 1px; border-top-color : #999999; border-top-style : solid; padding-right : 2px; border-right-width : 1px; border-right-color : #999999; border-right-style : solid; padding-bottom : 1px; border-bottom-width : 1px; border-bottom-color : #999999; border-bottom-style : solid; text-align : left; } a:visited.Element862 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; text-align : left; } a:visited.Element861 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: italic; text-decoration: none; text-align : left; } a:visited.Element860 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-weight: bold; font-style: normal; text-decoration: none; text-align : left; } a.Element862 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; text-align : left; } a.Element861 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: italic; text-decoration: none; text-align : left; } a.Element860 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-weight: bold; font-style: normal; text-decoration: none; text-align : left; } .Element862 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 0px; margin-right : 0px; margin-top : 1px; margin-bottom : 1px; padding-left : 2px; border-left-width : 1px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 0px; border-top-width : 1px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 2px; border-right-width : 1px; border-right-color : #FFFFFF; border-right-style : solid; padding-bottom : 0px; border-bottom-width : 1px; border-bottom-color : #FFFFFF; border-bottom-style : solid; text-indent : 0px; text-align : left; } .Element861 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: italic; text-decoration: none; margin-left : 0px; margin-right : 0px; margin-top : 1px; margin-bottom : 1px; padding-left : 2px; border-left-width : 1px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 1px; border-top-width : 1px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 2px; border-right-width : 1px; border-right-color : #FFFFFF; border-right-style : solid; padding-bottom : 1px; border-bottom-width : 1px; border-bottom-color : #FFFFFF; border-bottom-style : solid; text-indent : 0px; text-align : left; } .Element860 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-weight: bold; font-style: normal; text-decoration: none; margin-left : 0px; margin-right : 0px; margin-top : 1px; margin-bottom : 1px; padding-left : 2px; border-left-width : 1px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 1px; border-top-width : 1px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 2px; border-right-width : 1px; border-right-color : #FFFFFF; border-right-style : solid; padding-bottom : 1px; border-bottom-width : 1px; border-bottom-color : #FFFFFF; border-bottom-style : solid; text-indent : 0px; text-align : left; } .Element851 { color: #000000; margin-left : 15px; margin-top : 0px; margin-bottom : 0px; text-align : left; white-space: nowrap; } .Element850 { color: #000000; margin-left : 7px; margin-top : 10px; text-align : left; } .Element810 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-top : 3px; text-align : left; } .Element801 { color: #000000; background-color: #EBF0FF; padding-left : 5px; border-left-width : 1px; border-left-color : #C8CDDE; border-left-style : solid; padding-top : 5px; border-top-width : 1px; border-top-color : #C8CDDE; border-top-style : solid; padding-right : 5px; border-right-width : 1px; border-right-color : #C8CDDE; border-right-style : solid; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; position: absolute; z-index: 10; visibility: hidden; } .Element800 { color: #000000; background-color: #EBF0FF; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; text-align : left; } .Element740 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-top : 3px; margin-bottom : 3px; text-align : left; } .Element731 { color: #000000; margin-left : 0px; margin-right : 0px; margin-top : 2px; margin-bottom : 3px; text-align : left; } .Element730 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 0px; margin-right : 0px; margin-top : 0px; margin-bottom : 3px; padding-left : 15px; border-left-style : none; padding-top : 3px; border-top-width : 1px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 15px; border-right-style : none; border-bottom-style : none; text-align : left; } .Element721 { color: #000000; text-align : left; } .Element720 { color: #000000; text-align : left; } .Element710 { color: #000000; text-align : left; overflow: hidden; } .Element700 { color: #000000; margin-left : 0px; margin-right : 0px; margin-top : 0px; margin-bottom : 0px; text-align : left; overflow: hidden; } .Element639 { color: #000000; margin-top : 0px; margin-bottom : 0px; text-align : left; } .Element638 { color: #000000; margin-top : 0px; margin-bottom : 0px; text-align : left; } .Element637 { color: #000000; margin-top : 0px; margin-bottom : 0px; text-align : left; } .Element636 { color: #000000; margin-top : 0px; margin-bottom : 0px; text-align : left; } .Element635 { color: #000000; margin-top : 0px; margin-bottom : 0px; text-align : left; } .Element634 { color: #000000; margin-top : 0px; margin-bottom : 0px; text-align : left; } .Element633 { color: #000000; margin-top : 0px; margin-bottom : 0px; text-align : left; } .Element632 { color: #000000; margin-top : 0px; margin-bottom : 0px; text-align : left; } .Element631 { color: #000000; margin-top : 0px; margin-bottom : 0px; text-align : left; } .Element630 { color: #000000; margin-top : 10px; margin-bottom : 10px; text-align : left; } .Element609 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element608 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element607 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element606 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element605 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element604 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element603 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element602 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element601 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element600 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element315 { color: #000000; font-weight: bold; font-style: normal; text-decoration: none; margin-left : -7px; margin-top : 10px; margin-bottom : 5px; text-align : left; } .Element312 { color: #000000; font-style: normal; text-decoration: none; margin-left : 0px; margin-top : 10px; margin-bottom : 10px; text-align : left; } .Element311 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element310 { color: #000000; margin-left : 15px; margin-top : 0px; text-align : left; } .Element309 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element308 { color: #000000; margin-top : 3px; text-align : left; } .Element307 { color: #000000; font-style: normal; text-decoration: none; margin-top : 3px; margin-bottom : 3px; text-align : left; } .Element306 { color: #000000; background-color: #F7F7FF; margin-top : 0px; margin-bottom : 0px; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element305 { color: #000066; background-color: #EFEFF7; font-weight: bold; font-style: normal; text-decoration: none; margin-left : 0px; text-align : left; } .Element304 { color: #000000; background-color: #EFEFF7; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element303 { color: #000000; font-style: normal; text-decoration: none; margin-top : 3px; margin-bottom : 3px; text-align : left; } .Element302 { color: #000000; background-color: #F7F7FF; margin-top : 0px; margin-bottom : 0px; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element301 { color: #000066; background-color: #EFEFF7; font-weight: bold; font-style: normal; text-decoration: none; margin-left : 0px; text-align : left; } .Element300 { color: #000000; background-color: #EFEFF7; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element295 { color: #000000; font-weight: bold; font-style: normal; text-decoration: none; margin-left : -7px; margin-top : 10px; margin-bottom : 5px; text-align : left; } .Element292 { color: #000000; font-style: normal; text-decoration: none; margin-left : 0px; margin-top : 10px; margin-bottom : 10px; text-align : left; } .Element291 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element290 { color: #000000; margin-left : 15px; margin-top : 0px; text-align : left; } .Element289 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element288 { color: #000000; margin-top : 3px; text-align : left; } .Element287 { color: #000000; font-style: normal; text-decoration: none; margin-top : 3px; margin-bottom : 3px; text-align : left; } .Element286 { color: #000000; background-color: #F7F7FF; margin-top : 0px; margin-bottom : 0px; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element285 { color: #000066; background-color: #EFEFF7; font-weight: bold; font-style: normal; text-decoration: none; margin-left : 0px; text-align : left; } .Element284 { color: #000000; background-color: #EFEFF7; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element283 { color: #000000; font-style: normal; text-decoration: none; margin-top : 3px; margin-bottom : 3px; text-align : left; } .Element282 { color: #000000; background-color: #F7F7FF; margin-top : 0px; margin-bottom : 0px; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element281 { color: #000066; background-color: #EFEFF7; font-weight: bold; font-style: normal; text-decoration: none; margin-left : 0px; text-align : left; } .Element280 { color: #000000; background-color: #EFEFF7; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element275 { color: #000000; font-weight: bold; font-style: normal; text-decoration: none; margin-left : -7px; margin-top : 10px; margin-bottom : 5px; text-align : left; } .Element272 { color: #000000; font-style: normal; text-decoration: none; margin-left : 0px; margin-top : 10px; margin-bottom : 10px; text-align : left; } .Element271 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element270 { color: #000000; margin-left : 15px; margin-top : 0px; text-align : left; } .Element269 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element268 { color: #000000; margin-top : 3px; text-align : left; } .Element267 { color: #000000; font-style: normal; text-decoration: none; margin-top : 3px; margin-bottom : 3px; text-align : left; } .Element266 { color: #000000; background-color: #F7F7FF; margin-top : 0px; margin-bottom : 0px; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element265 { color: #000066; background-color: #EFEFF7; font-weight: bold; font-style: normal; text-decoration: none; margin-left : 0px; text-align : left; } .Element264 { color: #000000; background-color: #EFEFF7; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element263 { color: #000000; font-style: normal; text-decoration: none; margin-top : 3px; margin-bottom : 3px; text-align : left; } .Element262 { color: #000000; background-color: #F7F7FF; margin-top : 0px; margin-bottom : 0px; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element261 { color: #000066; background-color: #EFEFF7; font-weight: bold; font-style: normal; text-decoration: none; margin-left : 0px; text-align : left; } .Element260 { color: #000000; background-color: #EFEFF7; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element255 { color: #000000; font-weight: bold; font-style: normal; text-decoration: none; margin-left : -7px; margin-top : 10px; margin-bottom : 5px; text-align : left; } .Element252 { color: #000000; font-style: normal; text-decoration: none; margin-left : 0px; margin-top : 10px; margin-bottom : 10px; text-align : left; } .Element251 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element250 { color: #000000; margin-left : 15px; margin-top : 0px; text-align : left; } .Element249 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element248 { color: #000000; margin-top : 3px; text-align : left; } .Element247 { color: #000000; font-style: normal; text-decoration: none; margin-top : 3px; margin-bottom : 3px; text-align : left; } .Element246 { color: #000000; background-color: #F7F7FF; margin-top : 0px; margin-bottom : 0px; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element245 { color: #000066; background-color: #EFEFF7; font-weight: bold; font-style: normal; text-decoration: none; margin-left : 0px; text-align : left; } .Element244 { color: #000000; background-color: #EFEFF7; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element243 { color: #000000; font-style: normal; text-decoration: none; margin-top : 3px; margin-bottom : 3px; text-align : left; } .Element242 { color: #000000; background-color: #F7F7FF; margin-top : 0px; margin-bottom : 0px; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element241 { color: #000066; background-color: #EFEFF7; font-weight: bold; font-style: normal; text-decoration: none; margin-left : 0px; text-align : left; } .Element240 { color: #000000; background-color: #EFEFF7; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element235 { color: #000000; font-weight: bold; font-style: normal; text-decoration: none; margin-left : -7px; margin-top : 10px; margin-bottom : 5px; text-align : left; } .Element232 { color: #000000; font-style: normal; text-decoration: none; margin-left : 0px; margin-top : 10px; margin-bottom : 10px; text-align : left; } .Element231 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element230 { color: #000000; margin-left : 15px; margin-top : 0px; text-align : left; } .Element229 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element228 { color: #000000; margin-top : 3px; text-align : left; } .Element227 { color: #000000; font-style: normal; text-decoration: none; margin-top : 3px; margin-bottom : 3px; text-align : left; } .Element226 { color: #000000; background-color: #F7F7FF; margin-top : 0px; margin-bottom : 0px; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element225 { color: #000066; background-color: #EFEFF7; font-weight: bold; font-style: normal; text-decoration: none; margin-left : 0px; text-align : left; } .Element224 { color: #000000; background-color: #EFEFF7; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element223 { color: #000000; font-style: normal; text-decoration: none; margin-top : 3px; margin-bottom : 3px; text-align : left; } .Element222 { color: #000000; background-color: #F7F7FF; margin-top : 0px; margin-bottom : 0px; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element221 { color: #000066; background-color: #EFEFF7; font-weight: bold; font-style: normal; text-decoration: none; margin-left : 0px; text-align : left; } .Element220 { color: #000000; background-color: #EFEFF7; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element215 { color: #000000; font-weight: bold; font-style: normal; text-decoration: none; margin-left : -7px; margin-top : 10px; margin-bottom : 5px; text-align : left; } .Element212 { color: #000000; font-style: normal; text-decoration: none; margin-left : 0px; margin-top : 10px; margin-bottom : 10px; text-align : left; } .Element211 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element210 { color: #000000; margin-left : 15px; margin-top : 0px; text-align : left; } .Element209 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element208 { color: #000000; margin-top : 3px; text-align : left; } .Element207 { color: #000000; font-style: normal; text-decoration: none; margin-top : 3px; margin-bottom : 3px; text-align : left; } .Element206 { color: #000000; background-color: #F7F7FF; margin-top : 0px; margin-bottom : 0px; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element205 { color: #000066; background-color: #EFEFF7; font-weight: bold; font-style: normal; text-decoration: none; margin-left : 0px; text-align : left; } .Element204 { color: #000000; background-color: #EFEFF7; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element203 { color: #000000; font-style: normal; text-decoration: none; margin-top : 3px; margin-bottom : 3px; text-align : left; } .Element202 { color: #000000; background-color: #F7F7FF; margin-top : 0px; margin-bottom : 0px; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element201 { color: #000066; background-color: #EFEFF7; font-weight: bold; font-style: normal; text-decoration: none; margin-left : 0px; text-align : left; } .Element200 { color: #000000; background-color: #EFEFF7; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element190 { color: #000000; font-family: Arial,Helvetica,sans-serif; font-size: 14pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : 0px; margin-bottom : 9px; text-align : left; } .Element183 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 9pt; font-weight: bold; font-style: normal; text-decoration: none; margin-top : 10px; margin-bottom : 10px; border-left-style : none; border-top-style : none; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #D4DFFF; border-bottom-style : solid; text-align : left; } .Element182 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 0px; margin-top : 10px; margin-bottom : 10px; text-align : center; } .Element181 { color: #000000; text-align : left; } .Element180 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : 0px; margin-bottom : 10px; text-align : left; } .Element170 { color: #000066; background-color: #EFEFF7; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-top : 3px; margin-bottom : 0px; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 2px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 2px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : right; } .Element161 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : -7px; margin-bottom : 12px; text-align : left; } .Element160 { color: #000000; font-family: Arial,Helvetica,sans-serif; font-size: 14pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : 0px; margin-bottom : 9px; text-align : left; } .Element153 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : -7px; margin-bottom : 12px; text-align : left; } .Element152 { color: #000000; font-family: Arial,Helvetica,sans-serif; font-size: 14pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : 0px; margin-bottom : 9px; text-align : left; } .Element151 { color: #000000; margin-left : 15px; margin-top : 3px; text-align : left; white-space: pre; } .Element150 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-top : 0px; text-align : left; white-space: pre; } .Element146 { font-family: Courier New,Courier,monospace; font-size: 8pt; } .Element145 { color: #000000; font-style: normal; text-decoration: none; } a:visited { color: #0000FF; font-style: normal; text-decoration: underline; } a:hover { color: #3366FF; font-style: normal; text-decoration: underline; } a { color: #0000FF; font-style: normal; text-decoration: underline; } .Element103 { color: #000000; margin-left : 15px; margin-top : 3px; margin-bottom : 3px; text-align : left; white-space: pre; } .Element102 { color: #000000; background-color: #DDDDDD; font-style: normal; text-decoration: none; text-align : left; white-space: pre; } .Element101 { color: #000000; background-color: #F7F7FF; margin-left : 15px; margin-top : 0px; margin-bottom : 10px; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; white-space: pre; } .Element100 { color: #000000; font-family: Courier New,Courier,monospace; font-size: 9pt; font-style: normal; text-decoration: none; text-align : left; white-space: pre; } .Element99 { color: #000066; background-color: #EFEFF7; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-weight: bold; font-style: normal; text-decoration: none; margin-left : 15px; margin-top : 10px; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 0px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 0px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .a_Element99 { color: #000066; background-color: #EFEFF7; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-weight: bold; font-style: normal; text-decoration: none; } .Element97 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 7pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : 5px; margin-bottom : 0px; text-align : left; } .Element96 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 3px; margin-right : 15px; margin-top : 2px; margin-bottom : 2px; text-align : right; } .Element95 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : 10px; margin-bottom : 10px; border-left-style : none; padding-top : 5px; border-top-width : 1px; border-top-color : #C8CDDE; border-top-style : solid; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element94 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 0px; margin-right : 0px; margin-top : 0px; margin-bottom : 0px; padding-left : 15px; border-left-style : none; padding-top : 5px; border-top-style : none; padding-right : 15px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element93 { color: #000000; margin-left : 0px; margin-right : 15px; margin-top : 20px; margin-bottom : 0px; border-left-style : none; padding-top : 10px; border-top-width : 1px; border-top-color : #FFFFFF; border-top-style : solid; border-right-style : none; border-bottom-style : none; text-align : left; background-image: url("footer-bkg-whitegradient.gif"); background-repeat: repeat-x; background-position: top left; } .Element92 { color: #000000; background-color: #FFFFFF; border-left-style : none; border-top-style : none; border-right-style : none; padding-bottom : 0px; border-bottom-width : 1px; border-bottom-color : #FFFFFF; border-bottom-style : solid; text-align : left; background-image: url("header-bkg-whitegradient.gif"); background-repeat: repeat-x; background-position: bottom left; } .Element91 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 7pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : 5px; margin-bottom : 0px; text-align : left; } .Element90 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 3px; margin-right : 15px; margin-top : 2px; margin-bottom : 2px; text-align : right; white-space: nowrap; } .Element86 { color: #000000; font-style: normal; text-decoration: none; text-align : justify; } .Element85 { color: #000000; background-color: #F7F7FF; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : justify; } .Element84 { color: #000066; background-color: #EFEFF7; font-weight: bold; font-style: normal; text-decoration: none; margin-left : 0px; text-align : justify; } .Element83 { color: #000000; background-color: #EFEFF7; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : justify; } .Element82 { color: #000000; font-style: normal; text-decoration: none; text-align : right; } .Element81 { color: #000000; background-color: #F7F7FF; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : right; } .Element80 { color: #000066; background-color: #EFEFF7; font-weight: bold; font-style: normal; text-decoration: none; margin-left : 0px; text-align : right; } .Element79 { color: #000000; background-color: #EFEFF7; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : right; } .Element78 { color: #000000; font-style: normal; text-decoration: none; text-align : center; } .Element77 { color: #000000; background-color: #F7F7FF; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : center; } .Element76 { color: #000066; background-color: #EFEFF7; font-weight: bold; font-style: normal; text-decoration: none; margin-left : 0px; text-align : center; } .Element75 { color: #000000; background-color: #EFEFF7; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : center; } .Element68 { color: #000000; font-style: normal; text-decoration: none; text-align : left; } .Element67 { color: #000000; background-color: #F7F7FF; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element66 { color: #000066; background-color: #EFEFF7; font-weight: bold; font-style: normal; text-decoration: none; margin-left : 0px; text-align : left; } .Element65 { color: #000000; background-color: #EFEFF7; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element63 { color: #000000; font-style: normal; text-decoration: none; margin-left : 15px; margin-top : 10px; margin-bottom : 10px; text-align : left; } .Element62 { color: #000066; background-color: #EFEFF7; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 0px; margin-right : 0px; margin-top : 10px; margin-bottom : 10px; padding-left : 15px; border-left-width : 1px; border-left-color : #C8CDDE; border-left-style : solid; padding-top : 15px; border-top-width : 1px; border-top-color : #C8CDDE; border-top-style : solid; padding-right : 15px; border-right-width : 1px; border-right-color : #C8CDDE; border-right-style : solid; padding-bottom : 15px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element61 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-weight: bold; font-style: normal; text-decoration: none; } .Element58 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : 3px; margin-bottom : 3px; text-align : left; } .Element57 { color: #000000; margin-left : 0px; margin-right : 0px; margin-top : 0px; margin-bottom : 0px; text-align : left; } .Element56 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-weight: normal; font-style: normal; text-decoration: none; text-align : center; } .Element55 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 20pt; font-weight: bold; font-style: normal; text-decoration: none; margin-top : 100px; margin-bottom : 100px; text-align : center; } .Element54 { color: #000000; background-color: #FFFFFF; margin-top : 50px; text-align : left; background-image: url("CRYENGINE3_bg.jpg"); background-position: top left; background-repeat: no-repeat; } .Element50 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 30px; margin-top : 3px; text-align : left; } .Element49 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-top : 3px; text-align : left; } .Element48 { color: #000066; background-color: #EFEFF7; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 11pt; font-weight: bold; font-style: normal; text-decoration: none; margin-left : 7px; margin-top : 10px; margin-bottom : 3px; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; } .Element40 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : -7px; margin-bottom : 12px; text-align : left; } .Element39 { color: #000000; font-family: Arial,Helvetica,sans-serif; font-size: 14pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : 0px; margin-bottom : 9px; text-align : left; } .Element37 { color: #000000; font-family: Arial,Helvetica,sans-serif; font-size: 14pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : 0px; margin-bottom : 9px; text-align : left; } .Element35 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : -7px; margin-bottom : 12px; text-align : left; } .Element34 { color: #000000; font-family: Arial,Helvetica,sans-serif; font-size: 14pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : 0px; margin-bottom : 9px; text-align : left; } .Element28 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : -7px; margin-bottom : 12px; text-align : left; } .Element27 { color: #000000; font-family: Arial,Helvetica,sans-serif; font-size: 14pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : 0px; margin-bottom : 9px; text-align : left; } .Element25 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-top : 3px; margin-bottom : 10px; text-align : left; } .Element15 { color: #000000; font-weight: bold; font-style: normal; text-decoration: none; margin-left : -15px; margin-top : 10px; margin-bottom : 5px; text-align : left; } .Element14 { color: #4E69AB; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 11pt; font-weight: bold; font-style: normal; text-decoration: none; margin-top : 20px; margin-bottom : 20px; text-align : left; } .a_Element14 { color: #4E69AB; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 11pt; font-weight: bold; font-style: normal; text-decoration: none; } .Element13 { color: #000000; background-color: #F7F7FF; margin-left : 15px; margin-top : 0px; margin-bottom : 3px; padding-left : 6px; border-left-width : 2px; border-left-color : #FFFFFF; border-left-style : solid; padding-top : 5px; border-top-width : 2px; border-top-color : #FFFFFF; border-top-style : solid; padding-right : 6px; border-right-style : none; padding-bottom : 5px; border-bottom-width : 1px; border-bottom-color : #C8CDDE; border-bottom-style : solid; text-align : left; white-space: pre; } .Element12 { color: #000000; font-family: Courier New,Courier,monospace; font-style: normal; text-decoration: none; text-align : left; white-space: pre; } .Element11 { color: #000000; margin-left : 15px; margin-top : 10px; text-align : left; } .Element10 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-top : 10px; margin-bottom : 10px; text-align : left; } .Element9 { color: #000000; margin-left : 15px; margin-top : 10px; text-align : left; } .Element8 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-top : 10px; text-align : left; } .Element7 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : -7px; margin-bottom : 12px; text-align : left; } .Element6 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 14pt; font-style: normal; text-decoration: none; margin-top : 10px; border-left-style : none; padding-top : 3px; border-top-width : 2px; border-top-color : #949494; border-top-style : solid; border-right-style : none; border-bottom-style : none; text-align : left; } .Element5 { color: #000000; font-family: Arial,Helvetica,sans-serif; font-size: 15pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : 0px; margin-bottom : 9px; text-align : left; } .Element4 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 7pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : 5px; margin-bottom : 0px; text-align : left; } .Element3 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 7pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 15px; margin-top : 5px; margin-bottom : 0px; text-align : left; } .Element2 { color: #000000; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 8pt; font-style: normal; text-decoration: none; margin-left : 3px; margin-right : 3px; margin-top : 2px; margin-bottom : 2px; text-align : center; white-space: nowrap; } .Element1 { color: #8C8C8C; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 7pt; font-style: normal; text-decoration: none; margin-left : 15px; margin-right : 3px; margin-top : 3px; margin-bottom : 0px; text-align : left; } </style> <!-- Begin Popups --> <!-- End Popups --> <!-- Begin Page Header --> <div class="Element710" id="areafixed"> <div class="Element94"> <em>You are here:</em> <a href="Common_Ref">Common</a> > <a href="Math_Ref">Math</a> > <a href="Vec3_tpl">Vec3_tpl Structure</a></div> <div class="Element5"> Vec3_tpl Structure</div> </div> <!-- End Page Header --> <!-- Begin Client Area --> <div class="Element720" id="areascroll"> <div class="Element721"> <!-- Begin Page Content --> <div class="Element58"> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">typename</span></strong> F> <strong><span style="color: #871F78">struct</span></strong> <strong><span style="color: #660000">Vec3_tpl</span></strong> { F <strong><span style="color: #660000"><a href="Vec3_tpl#006F">x</a></span></strong>, <a href="Vec3_tpl#0070">y</a>, <a href="Vec3_tpl#0071">z</a>; <strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">typename</span></strong> F> <strong><span style="color: #871F78">struct</span></strong> <strong><span style="color: #660000"><a href="Vec3_tpl#0011">Ang3_tpl</a></span></strong> { F <strong><span style="color: #660000"><a href="Vec3_tpl#006F">x</a></span></strong>, <a href="Vec3_tpl#0070">y</a>, <a href="Vec3_tpl#0071">z</a>; <strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">typename</span></strong> F> <strong><span style="color: #871F78">struct</span></strong> <strong><span style="color: #660000">AngleAxis_tpl</span></strong> { F <strong><span style="color: #660000">angle</span></strong>; Vec3_tpl<F> <strong><span style="color: #660000">axis</span></strong>; }; <strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">typename</span></strong> F> <strong><span style="color: #871F78">struct</span></strong> <strong><span style="color: #660000">Plane_tpl</span></strong> { Vec3_tpl<F> <strong><span style="color: #660000">n</span></strong>; F <strong><span style="color: #660000">d</span></strong>; }; }; };</pre></div></div> <a name="46696C65"></a><div class="Element14"> File</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> Cry_Vector3.h</p></div> </div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> class Vec3_tpl</p></div> </div> <div class="Element6"> <a name="0011"></a>Vec3_tpl::Ang3_tpl Structure</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">typename</span></strong> F> <strong><span style="color: #871F78">struct</span></strong> <strong><span style="color: #660000">Ang3_tpl</span></strong> { F <strong><span style="color: #660000"><a href="Vec3_tpl#004E">x</a></span></strong>, <a href="Vec3_tpl#004F">y</a>, <a href="Vec3_tpl#0050">z</a>; <strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">typename</span></strong> F> <strong><span style="color: #871F78">struct</span></strong> <strong><span style="color: #660000"><a href="Vec3_tpl#0026">AngleAxis_tpl</a></span></strong> { F <strong><span style="color: #660000">angle</span></strong>; <a href="Vec3_tpl">Vec3_tpl</a><F> <strong><span style="color: #660000">axis</span></strong>; }; <strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">typename</span></strong> F> <strong><span style="color: #871F78">struct</span></strong> <strong><span style="color: #660000"><a href="Vec3_tpl#0032">Plane_tpl</a></span></strong> { <a href="Vec3_tpl">Vec3_tpl</a><F> <strong><span style="color: #660000">n</span></strong>; F <strong><span style="color: #660000">d</span></strong>; }; };</pre></div></div> <a name="46696C65"></a><div class="Element14"> File</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> Cry_Vector3.h</p></div> </div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> struct Ang3_tpl</p></div> </div> <div class="Element6"> <a name="0026"></a>Vec3_tpl::Ang3_tpl::AngleAxis_tpl Structure</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">typename</span></strong> F> <strong><span style="color: #871F78">struct</span></strong> <strong><span style="color: #660000">AngleAxis_tpl</span></strong> { F <strong><span style="color: #660000"><a href="Vec3_tpl#0029">angle</a></span></strong>; <a href="Vec3_tpl">Vec3_tpl</a><F> <strong><span style="color: #660000"><a href="Vec3_tpl#002F">axis</a></span></strong>; };</pre></div></div> <a name="46696C65"></a><div class="Element14"> File</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> Cry_Vector3.h</p></div> </div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> struct CAngleAxis</p></div> </div> <div class="Element6"> <a name="0029"></a>Vec3_tpl::Ang3_tpl::AngleAxis_tpl::angle Data Member</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100">F <strong><span style="color: #660000">angle</span></strong>;</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> ! storage for the Angle&Axis coordinates.</p></div> </div> <div class="Element6"> <a name="002F"></a>Vec3_tpl::Ang3_tpl::AngleAxis_tpl::axis Data Member</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><a href="Vec3_tpl">Vec3_tpl</a><F> <strong><span style="color: #660000">axis</span></strong>;</pre></div></div> <div class="Element6"> <a name="0027"></a>Vec3_tpl::Ang3_tpl::AngleAxis_tpl::() Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">void</span></strong> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">()</span></strong>(F <strong><span style="color: #660000">a</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> & <strong><span style="color: #660000">n</span></strong>);</pre></div></div> <div class="Element6"> <a name="0028"></a>Vec3_tpl::Ang3_tpl::AngleAxis_tpl::* Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">*</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& <strong><span style="color: #660000">v</span></strong>) <strong><span style="color: #871F78">const</span></strong>;</pre></div></div> <div class="Element6"> <a name="002A"></a>Vec3_tpl::Ang3_tpl::AngleAxis_tpl::AngleAxis_tpl Constructor ()</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #660000">AngleAxis_tpl</span></strong>(); <strong><span style="color: #660000">AngleAxis_tpl</span></strong>(F <strong><span style="color: #660000">a</span></strong>, F <strong><span style="color: #660000">ax</span></strong>, F <strong><span style="color: #660000">ay</span></strong>, F <strong><span style="color: #660000">az</span></strong>); <strong><span style="color: #660000">AngleAxis_tpl</span></strong>(F <strong><span style="color: #660000">a</span></strong>, <a href="Vec3_tpl">Vec3_tpl</a><F> & <strong><span style="color: #660000">n</span></strong>); <strong><span style="color: #660000">AngleAxis_tpl</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Quat_tpl">Quat_tpl</a><F>& <strong><span style="color: #660000">q</span></strong>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> default quaternion constructor</p></div> </div> <div class="Element6"> <a name="002B"></a>Vec3_tpl::Ang3_tpl::AngleAxis_tpl::AngleAxis_tpl Constructor (AngleAxis_tpl<F>&)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #660000">AngleAxis_tpl</span></strong>(<strong><span style="color: #871F78">const</span></strong> AngleAxis_tpl<F>& <strong><span style="color: #660000">aa</span></strong>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> CAngleAxis aa=angleaxis</p></div> </div> <div class="Element6"> <a name="0032"></a>Vec3_tpl::Ang3_tpl::Plane_tpl Structure</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">typename</span></strong> F> <strong><span style="color: #871F78">struct</span></strong> <strong><span style="color: #660000">Plane_tpl</span></strong> { <a href="Vec3_tpl">Vec3_tpl</a><F> <strong><span style="color: #660000"><a href="Vec3_tpl#003F">n</a></span></strong>; F <strong><span style="color: #660000"><a href="Vec3_tpl#003C">d</a></span></strong>; };</pre></div></div> <a name="46696C65"></a><div class="Element14"> File</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> Cry_Vector3.h</p></div> </div> <div class="Element6"> <a name="003C"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::d Data Member</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100">F <strong><span style="color: #660000">d</span></strong>;</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> !< distance</p></div> </div> <div class="Element6"> <a name="003F"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::n Data Member</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><a href="Vec3_tpl">Vec3_tpl</a><F> <strong><span style="color: #660000">n</span></strong>;</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> !< normal</p></div> </div> <div class="Element6"> <a name="0035"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::- Operator ()</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><a href="Vec3_tpl#0032">Plane_tpl</a><F> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">-</span></strong>() <strong><span style="color: #871F78">const</span></strong>;</pre></div></div> <div class="Element6"> <a name="0036"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::- Operator (Plane_tpl<F> &)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><a href="Vec3_tpl#0032">Plane_tpl</a><F> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">-</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0032">Plane_tpl</a><F> & <strong><span style="color: #660000">p</span></strong>) <strong><span style="color: #871F78">const</span></strong>;</pre></div></div> <div class="Element6"> <a name="0033"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::* Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><a href="Vec3_tpl#0032">Plane_tpl</a><F> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">*</span></strong>(F <strong><span style="color: #660000">s</span></strong>) <strong><span style="color: #871F78">const</span></strong>;</pre></div></div> <div class="Element6"> <a name="0034"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::/ Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><a href="Vec3_tpl#0032">Plane_tpl</a><F> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">/</span></strong>(F <strong><span style="color: #660000">s</span></strong>) <strong><span style="color: #871F78">const</span></strong>;</pre></div></div> <div class="Element6"> <a name="0037"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::| Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100">F <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">|</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> & <strong><span style="color: #660000">point</span></strong>) <strong><span style="color: #871F78">const</span></strong>;</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> !</p> <ul class="Element630"> <li class="Element600">Computes signed distance from point to plane.</li> <li class="Element600">This is the standard plane-equation: <a href="Vec3_tpl#003C">d</a>=Ax*By*Cz+D.</li> <li class="Element600">The normal-<a href="vector">vector</a> is assumed to be normalized.</li> </ul><p class="Element10"> *</p> <ul class="Element630"> <li class="Element600">Example:</li> <li class="Element600"><a href="Vec3_tpl#0059">Vec3</a> v(1,2,3);</li> <li class="Element600"><a href="Vec3_tpl#0032">Plane_tpl</a>plane=CalculatePlane(v0,v1,v2);</li> <li class="Element600">f32 distance = plane|v;</li> </ul></div> </div> <div class="Element6"> <a name="0038"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::+ Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><a href="Vec3_tpl#0032">Plane_tpl</a><F> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">+</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0032">Plane_tpl</a><F> & <strong><span style="color: #660000">p</span></strong>) <strong><span style="color: #871F78">const</span></strong>;</pre></div></div> <div class="Element6"> <a name="0039"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::-= Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">void</span></strong> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">-=</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0032">Plane_tpl</a><F> & <strong><span style="color: #660000">p</span></strong>);</pre></div></div> <div class="Element6"> <a name="003A"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::CreatePlane Method (Vec3_tpl<F> &, Vec3_tpl<F> &)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">static</span></strong> <a href="Vec3_tpl#0032">Plane_tpl</a><F> <strong><span style="color: #660000">CreatePlane</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> & <strong><span style="color: #660000">normal</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> & <strong><span style="color: #660000">point</span></strong>);</pre></div></div> <div class="Element6"> <a name="003B"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::CreatePlane Method (Vec3_tpl<F> &, Vec3_tpl<F> &, Vec3_tpl<F> &)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">static</span></strong> <a href="Vec3_tpl#0032">Plane_tpl</a><F> <strong><span style="color: #660000">CreatePlane</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> & <strong><span style="color: #660000">v0</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> & <strong><span style="color: #660000">v1</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> & <strong><span style="color: #660000">v2</span></strong>);</pre></div></div> <div class="Element6"> <a name="003D"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::DistFromPlane Method</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100">F <strong><span style="color: #660000">DistFromPlane</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> & <strong><span style="color: #660000">vPoint</span></strong>) <strong><span style="color: #871F78">const</span></strong>;</pre></div></div> <div class="Element6"> <a name="0041"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::Plane_tpl Constructor ()</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #660000">Plane_tpl</span></strong>();</pre></div></div> <div class="Element6"> <a name="0042"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::Plane_tpl Constructor (Plane_tpl<F> &)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #660000">Plane_tpl</span></strong>(<strong><span style="color: #871F78">const</span></strong> Plane_tpl<F> & <strong><span style="color: #660000">p</span></strong>);</pre></div></div> <div class="Element6"> <a name="0043"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::Plane_tpl Constructor (Vec3_tpl<F> &, F &)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #660000">Plane_tpl</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> & <strong><span style="color: #660000">normal</span></strong>, <strong><span style="color: #871F78">const</span></strong> F & <strong><span style="color: #660000">distance</span></strong>);</pre></div></div> <div class="Element6"> <a name="0046"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::Set Method</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">void</span></strong> <strong><span style="color: #660000">Set</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> & <strong><span style="color: #660000">vNormal</span></strong>, <strong><span style="color: #871F78">const</span></strong> F <strong><span style="color: #660000">fDist</span></strong>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> ! <a href="set">set</a> normal and dist for this plane and then calculate plane type</p></div> </div> <div class="Element6"> <a name="0047"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::SetPlane Method (Vec3_tpl<F> &, Vec3_tpl<F> &)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">void</span></strong> <strong><span style="color: #660000">SetPlane</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> & <strong><span style="color: #660000">normal</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> & <strong><span style="color: #660000">point</span></strong>);</pre></div></div> <div class="Element6"> <a name="0048"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::SetPlane Method (Vec3_tpl<F> &, Vec3_tpl<F> &, Vec3_tpl<F> &)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">void</span></strong> <strong><span style="color: #660000">SetPlane</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> & <strong><span style="color: #660000">v0</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> & <strong><span style="color: #660000">v1</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> & <strong><span style="color: #660000">v2</span></strong>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> !</p> <ul class="Element630"> <li class="Element600">Constructs the plane by tree given Vec3s (=triangle) with a right-hand (anti-clockwise) winding</li> </ul><p class="Element10"> *</p> <ul class="Element630"> <li class="Element600">Example 1:</li> <li class="Element600"><a href="Vec3_tpl#0059">Vec3</a> v0(1,2,3),v1(4,5,6),v2(6,5,6);</li> <li class="Element600"><a href="Vec3_tpl#0032">Plane_tpl</a>plane;</li> <li class="Element600">plane.SetPlane(v0,v1,v2);</li> </ul><p class="Element10"> *</p> <ul class="Element630"> <li class="Element600">Example 2:</li> <li class="Element600"><a href="Vec3_tpl#0059">Vec3</a> v0(1,2,3),v1(4,5,6),v2(6,5,6);</li> <li class="Element600"><a href="Vec3_tpl#0032">Plane_tpl</a>plane=<a href="Vec3_tpl#0032">Plane_tpl</a>::<a href="Vec3_tpl#003A">CreatePlane</a>(v0,v1,v2);</li> </ul></div> </div> <div class="Element6"> <a name="0049"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::Vec3Constants<T>::fVec3_One Method</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">typename</span></strong> T> <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><T> <strong><span style="color: #660000"><a href="Vec3Constants">Vec3Constants</a><T>::fVec3_One</span></strong>(1, 1, 1);</pre></div></div> <div class="Element6"> <a name="004A"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::Vec3Constants<T>::fVec3_OneX Method</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">typename</span></strong> T> <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><T> <strong><span style="color: #660000"><a href="Vec3Constants">Vec3Constants</a><T>::fVec3_OneX</span></strong>(1, 0, 0);</pre></div></div> <div class="Element6"> <a name="004B"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::Vec3Constants<T>::fVec3_OneY Method</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">typename</span></strong> T> <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><T> <strong><span style="color: #660000"><a href="Vec3Constants">Vec3Constants</a><T>::fVec3_OneY</span></strong>(0, 1, 0);</pre></div></div> <div class="Element6"> <a name="004C"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::Vec3Constants<T>::fVec3_OneZ Method</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">typename</span></strong> T> <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><T> <strong><span style="color: #660000"><a href="Vec3Constants">Vec3Constants</a><T>::fVec3_OneZ</span></strong>(0, 0, 1);</pre></div></div> <div class="Element6"> <a name="004D"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::Vec3Constants<T>::fVec3_Zero Method</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">typename</span></strong> T> <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><T> <strong><span style="color: #660000"><a href="Vec3Constants">Vec3Constants</a><T>::fVec3_Zero</span></strong>(0, 0, 0);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> define the constants</p></div> </div> <div class="Element6"> <a name="003E"></a>friend bool operator ==(const Plane_tpl<F> &p1, const Plane_tpl<F> &p2) { if (fabsf(p1.n.x-p2.n.x)>0.0001f) return (false); if (fabsf(p1.n.y-p2.n.y)>0.0001f) return (false); if (fabsf(p1.n.z-p2.n.z)>0.0001f) return (false); if (fabsf(p1.d-p2.d)<0.01f) return(true); return (false); } Vec3_tpl<F> MirrorVector(const Vec3_tpl<F>& i) { return n*(2* (n|i))-i; } Vec3_tpl<F> MirrorPosition(const Vec3_tpl<F>& i) { return i - n*(2* ((n|i)+d)); } AUTO_STRUCT_INFO } Friend</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">friend</span></strong> <strong><span style="color: #871F78">bool</span></strong> <strong><span style="color: #871F78">operator</span></strong> ==(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0032">Plane_tpl</a><F> &p1, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0032">Plane_tpl</a><F> &p2) { <strong><span style="color: #871F78">if</span></strong> (fabsf(p1.<a href="Vec3_tpl#003F">n</a>.<a href="Vec3_tpl#004E">x</a>-p2.<a href="Vec3_tpl#003F">n</a>.<a href="Vec3_tpl#004E">x</a>)>0.0001f) <strong><span style="color: #871F78">return</span></strong> (<strong><span style="color: #871F78">false</span></strong>); <strong><span style="color: #871F78">if</span></strong> (fabsf(p1.<a href="Vec3_tpl#003F">n</a>.<a href="Vec3_tpl#004F">y</a>-p2.<a href="Vec3_tpl#003F">n</a>.<a href="Vec3_tpl#004F">y</a>)>0.0001f) <strong><span style="color: #871F78">return</span></strong> (<strong><span style="color: #871F78">false</span></strong>); <strong><span style="color: #871F78">if</span></strong> (fabsf(p1.<a href="Vec3_tpl#003F">n</a>.<a href="Vec3_tpl#0050">z</a>-p2.<a href="Vec3_tpl#003F">n</a>.<a href="Vec3_tpl#0050">z</a>)>0.0001f) <strong><span style="color: #871F78">return</span></strong> (<strong><span style="color: #871F78">false</span></strong>); <strong><span style="color: #871F78">if</span></strong> (fabsf(p1.<a href="Vec3_tpl#003C">d</a>-p2.<a href="Vec3_tpl#003C">d</a>)<0.01f) <strong><span style="color: #871F78">return</span></strong>(<strong><span style="color: #871F78">true</span></strong>); <strong><span style="color: #871F78">return</span></strong> (<strong><span style="color: #871F78">false</span></strong>); } <a href="Vec3_tpl">Vec3_tpl</a><F> MirrorVector(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& i) { <strong><span style="color: #871F78">return</span></strong> <a href="Vec3_tpl#003F">n</a>*(2* (<a href="Vec3_tpl#003F">n</a>|i))-i; } <a href="Vec3_tpl">Vec3_tpl</a><F> MirrorPosition(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& i) { <strong><span style="color: #871F78">return</span></strong> i - <a href="Vec3_tpl#003F">n</a>*(2* ((<a href="Vec3_tpl#003F">n</a>|i)+<a href="Vec3_tpl#003C">d</a>)); } AUTO_STRUCT_INFO };</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> ! check for equality between two planes</p></div> </div> <div class="Element6"> <a name="0040"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::Plane Nested Type</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">typedef</span></strong> <a href="Vec3_tpl#0032">Plane_tpl</a><f32> <strong><span style="color: #660000">Plane</span></strong>;</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> always 32 bit</p></div> </div> <div class="Element6"> <a name="0044"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::Planed Nested Type</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">typedef</span></strong> <a href="Vec3_tpl#0032">Plane_tpl</a><f64> <strong><span style="color: #660000">Planed</span></strong>;</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> always 64 bit</p></div> </div> <div class="Element6"> <a name="0045"></a>Vec3_tpl::Ang3_tpl::Plane_tpl::Planer Nested Type</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">typedef</span></strong> <a href="Vec3_tpl#0032">Plane_tpl</a><real> <strong><span style="color: #660000">Planer</span></strong>;</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> variable float precision. depending on the target system it can be between 32, 64 or 80 bit</p></div> </div> <div class="Element6"> <a name="004E"></a>Vec3_tpl::Ang3_tpl::x Data Member</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100">F <strong><span style="color: #660000">x</span></strong>;</pre></div></div> <div class="Element6"> <a name="004F"></a>Vec3_tpl::Ang3_tpl::y Data Member</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100">F <strong><span style="color: #660000">y</span></strong>;</pre></div></div> <div class="Element6"> <a name="0050"></a>Vec3_tpl::Ang3_tpl::z Data Member</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100">F <strong><span style="color: #660000">z</span></strong>;</pre></div></div> <div class="Element6"> <a name="0018"></a>Vec3_tpl::Ang3_tpl::- Operator ()</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><a href="Vec3_tpl#0011">Ang3_tpl</a><F> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">-</span></strong>() <strong><span style="color: #871F78">const</span></strong>;</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> explicit ILINE <a href="Vec3_tpl#0011">Ang3_tpl</a>& operator = (const <a href="Vec3_tpl">Vec3_tpl</a>& v) { <a href="Vec3_tpl#004E">x</a>=v.<a href="Vec3_tpl#004E">x</a>; <a href="Vec3_tpl#004F">y</a>=v.<a href="Vec3_tpl#004F">y</a>; <a href="Vec3_tpl#0050">z</a>=v.<a href="Vec3_tpl#0050">z</a>; return *this;</p></div> </div> <div class="Element6"> <a name="0017"></a>Vec3_tpl::Ang3_tpl::- Operator (Ang3_tpl<F1> &, Ang3_tpl<F2> &)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> F1,<strong><span style="color: #871F78">class</span></strong> F2> <a href="Vec3_tpl#0011">Ang3_tpl</a><F1> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">-</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><F1> & <strong><span style="color: #660000">v0</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><F2> & <strong><span style="color: #660000">v1</span></strong>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> <a href="vector">vector</a> subtraction</p></div> </div> <div class="Element6"> <a name="0012"></a>Vec3_tpl::Ang3_tpl::!= Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">bool</span></strong> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">!=</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><F> & <strong><span style="color: #660000">vec</span></strong>);</pre></div></div> <div class="Element6"> <a name="0013"></a>Vec3_tpl::Ang3_tpl::() Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">void</span></strong> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">()</span></strong>(F <strong><span style="color: #660000">vx</span></strong>, F <strong><span style="color: #660000">vy</span></strong>, F <strong><span style="color: #660000">vz</span></strong>);</pre></div></div> <div class="Element6"> <a name="0014"></a>Vec3_tpl::Ang3_tpl::* Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><a href="Vec3_tpl#0011">Ang3_tpl</a><F> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">*</span></strong>(F <strong><span style="color: #660000">k</span></strong>) <strong><span style="color: #871F78">const</span></strong>;</pre></div></div> <div class="Element6"> <a name="0015"></a>Vec3_tpl::Ang3_tpl::*= Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><a href="Vec3_tpl#0011">Ang3_tpl</a><F>& <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">*=</span></strong>(F <strong><span style="color: #660000">k</span></strong>);</pre></div></div> <div class="Element6"> <a name="0016"></a>Vec3_tpl::Ang3_tpl::/ Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><a href="Vec3_tpl#0011">Ang3_tpl</a><F> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">/</span></strong>(F <strong><span style="color: #660000">k</span></strong>) <strong><span style="color: #871F78">const</span></strong>;</pre></div></div> <div class="Element6"> <a name="0019"></a>Vec3_tpl::Ang3_tpl::+ Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> F1,<strong><span style="color: #871F78">class</span></strong> F2> <a href="Vec3_tpl#0011">Ang3_tpl</a><F1> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">+</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><F1> & <strong><span style="color: #660000">v0</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><F2> & <strong><span style="color: #660000">v1</span></strong>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> <a href="vector">vector</a> addition</p></div> </div> <div class="Element6"> <a name="001A"></a>Vec3_tpl::Ang3_tpl::+= Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> F1,<strong><span style="color: #871F78">class</span></strong> F2> <a href="Vec3_tpl#0011">Ang3_tpl</a><F1>& <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">+=</span></strong>(<a href="Vec3_tpl#0011">Ang3_tpl</a><F1> & <strong><span style="color: #660000">v0</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><F2> & <strong><span style="color: #660000">v1</span></strong>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> <a href="vector">vector</a> self-addition</p></div> </div> <div class="Element6"> <a name="001B"></a>Vec3_tpl::Ang3_tpl::-= Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> F1,<strong><span style="color: #871F78">class</span></strong> F2> <a href="Vec3_tpl#0011">Ang3_tpl</a><F1>& <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">-=</span></strong>(<a href="Vec3_tpl#0011">Ang3_tpl</a><F1> & <strong><span style="color: #660000">v0</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><F2> & <strong><span style="color: #660000">v1</span></strong>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> <a href="vector">vector</a> self-subtraction</p></div> </div> <div class="Element6"> <a name="001C"></a>Vec3_tpl::Ang3_tpl::== Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">bool</span></strong> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">==</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><F> & <strong><span style="color: #660000">vec</span></strong>);</pre></div></div> <div class="Element6"> <a name="001F"></a>Vec3_tpl::Ang3_tpl::Ang3_tpl Constructor ()</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #660000">Ang3_tpl</span></strong>();</pre></div></div> <div class="Element6"> <a name="0020"></a>Vec3_tpl::Ang3_tpl::Ang3_tpl Constructor (F, F, F)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #660000">Ang3_tpl</span></strong><F>(F <strong><span style="color: #660000">vx</span></strong>, F <strong><span style="color: #660000">vy</span></strong>, F <strong><span style="color: #660000">vz</span></strong>);</pre></div></div> <div class="Element6"> <a name="0022"></a>Vec3_tpl::Ang3_tpl::Ang3_tpl Constructor (Vec3_tpl<F>&)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">explicit</span></strong> <strong><span style="color: #660000">Ang3_tpl</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& <strong><span style="color: #660000">v</span></strong>);</pre></div></div> <div class="Element6"> <a name="0021"></a>Vec3_tpl::Ang3_tpl::Ang3_tpl Constructor (type_zero)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #660000">Ang3_tpl</span></strong>(<a href="Math_Enums#0015">type_zero</a>);</pre></div></div> <div class="Element6"> <a name="0030"></a>Vec3_tpl::Ang3_tpl::AngleAxis_tpl<F>::* Method</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">typename</span></strong> F> <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> <strong><span style="color: #660000"><a href="Vec3_tpl#0026">AngleAxis_tpl</a><F>::*</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> & <strong><span style="color: #660000">v</span></strong>) <strong><span style="color: #871F78">const</span></strong>;</pre></div></div> <div class="Element6"> <a name="0031"></a>friend bool operator ==(const Ang3_tpl<F> &v0, const Ang3_tpl<F> &v1) { return ((v0.x==v1.x) && (v0.y==v1.y) && (v0.z==v1.z)); } void Set(F xval,F yval,F zval) { x=xval; y=yval; z=zval; } bool IsEquivalent( const Ang3_tpl<F>& v1, F epsilon=VEC_EPSILON) const { return ((fabs_tpl(x-v1.x) <= epsilon) && (fabs_tpl(y-v1.y) <= epsilon)&& (fabs_tpl(z-v1.z) <= epsilon)); } bool IsInRangePI() const { F pi=(F)(gf_PI+0.001); return ( (x>-pi)&&(x<pi) && (y>-pi)&&(y<pi) && (z>-pi)&&(z<pi) ); } void RangePI() { const F modX = fmod(x+gf_PI, gf_PI2); x = if_neg_else(modX, modX+gf_PI, modX - gf_PI); const F modY = fmod(y+gf_PI, gf_PI2); y = if_neg_else(modY, modY+gf_PI, modY - gf_PI); const F modZ = fmod(z+gf_PI, gf_PI2); z = if_neg_else(modZ, modZ+gf_PI, modZ - gf_PI); } template<class F1> explicit Ang3_tpl( const Quat_tpl<F1>& q ) { assert(q.IsValid()); y = F( asin_tpl(max((F)-1.0,min((F)1.0,-(q.v.x*q.v.z-q.w*q.v.y)*2))) ); if (fabs_tpl(fabs_tpl(y)-(F)((F)g_PI*(F)0.5))<(F)0.01) { x = F(0); z = F(atan2_tpl(-2*(q.v.x*q.v.y-q.w*q.v.z),1-(q.v.x*q.v.x+q.v.z*q.v.z)*2)); } else { x = F(atan2_tpl((q.v.y*q.v.z+q.w*q.v.x)*2, 1-(q.v.x*q.v.x+q.v.y*q.v.y)*2)); z = F(atan2_tpl((q.v.x*q.v.y+q.w*q.v.z)*2, 1-(q.v.z*q.v.z+q.v.y*q.v.y)*2)); } } template<class F1> explicit Ang3_tpl( const Matrix33_tpl<F1>& m ) { assert( m.IsOrthonormalRH(0.001f) ); y = (F)asin_tpl(max((F)-1.0,min((F)1.0,-m.m20))); if (fabs_tpl(fabs_tpl(y)-(F)((F)g_PI*(F)0.5))<(F)0.01) { x = F(0); z = F(atan2_tpl(-m.m01,m.m11)); } else { x = F(atan2_tpl(m.m21, m.m22)); z = F(atan2_tpl(m.m10, m.m00)); } } template<class F1> explicit Ang3_tpl( const Matrix34_tpl<F1>& m ) { assert( m.IsOrthonormalRH(0.001f) ); y = F( asin_tpl(max((F)-1.0,min((F)1.0,-m.m20))) ); if (fabs_tpl(fabs_tpl(y)-(F)((F)g_PI*(F)0.5))<(F)0.01) { x = F(0); z = F(atan2_tpl(-m.m01,m.m11)); } else { x = F(atan2_tpl(m.m21, m.m22)); z = F(atan2_tpl(m.m10, m.m00)); } } template<class F1> explicit Ang3_tpl( const Matrix44_tpl<F1>& m ) { assert( Matrix33(m).IsOrthonormalRH(0.001f) ); y = F( asin_tpl(max((F)-1.0,min((F)1.0,-m.m20))) ); if (fabs_tpl(fabs_tpl(y)-(F)((F)g_PI*(F)0.5))<(F)0.01) { x = F(0); z = F(atan2_tpl(-m.m01,m.m11)); } else { x = F(atan2_tpl(m.m21, m.m22)); z = F(atan2_tpl(m.m10, m.m00)); } } template<typename F1> static F CreateRadZ( const Vec2_tpl<F1>& v0, const Vec2_tpl<F1>& v1 ) { F cz = v0.x*v1.y-v0.y*v1.x; F c = v0.x*v1.x+v0.y*v1.y; return F( atan2_tpl(cz,c) ); } template<typename F1> static F CreateRadZ( const Vec3_tpl<F1>& v0, const Vec3_tpl<F1>& v1 ) { F cz = v0.x*v1.y-v0.y*v1.x; F c = v0.x*v1.x+v0.y*v1.y; return F( atan2_tpl(cz,c) ); } template<typename F1> static Ang3_tpl<F> GetAnglesXYZ( const Quat_tpl<F1>& q ) { return Ang3_tpl<F>(q); } template<typename F1> void SetAnglesXYZ( const Quat_tpl<F1>& q ) { *this=Ang3_tpl<F>(q); } template<typename F1> static Ang3_tpl<F> GetAnglesXYZ( const Matrix33_tpl<F1>& m ) { return Ang3_tpl<F>(m); } template<typename F1> void SetAnglesXYZ( const Matrix33_tpl<F1>& m ) { *this=Ang3_tpl<F>(m); } template<typename F1> static Ang3_tpl<F> GetAnglesXYZ( const Matrix34_tpl<F1>& m ) { return Ang3_tpl<F>(m); } template<typename F1> void SetAnglesXYZ( const Matrix34_tpl<F1>& m ) { *this=Ang3_tpl<F>(m); } F &operator [] (int index) { assert(index>=0 && index<=2); return ((F*)this)[index]; } F operator [] (int index) const { assert(index>=0 && index<=2); return ((F*)this)[index]; } bool IsValid() const { if (!NumberValid(x)) return false; if (!NumberValid(y)) return false; if (!NumberValid(z)) return false; return true; } AUTO_STRUCT_INFO } Friend</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">friend</span></strong> <strong><span style="color: #871F78">bool</span></strong> <strong><span style="color: #871F78">operator</span></strong> ==(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><F> &v0, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><F> &v1) { <strong><span style="color: #871F78">return</span></strong> ((v0.<a href="Vec3_tpl#004E">x</a>==v1.<a href="Vec3_tpl#004E">x</a>) && (v0.<a href="Vec3_tpl#004F">y</a>==v1.<a href="Vec3_tpl#004F">y</a>) && (v0.<a href="Vec3_tpl#0050">z</a>==v1.<a href="Vec3_tpl#0050">z</a>)); } <strong><span style="color: #871F78">void</span></strong> <a href="Vec3_tpl#0056">Set</a>(F xval,F yval,F zval) { <a href="Vec3_tpl#004E">x</a>=xval; <a href="Vec3_tpl#004F">y</a>=yval; <a href="Vec3_tpl#0050">z</a>=zval; } <strong><span style="color: #871F78">bool</span></strong> <a href="Vec3_tpl#0053">IsEquivalent</a>( <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><F>& v1, F epsilon=<a href="Math_Macros#002C">VEC_EPSILON</a>) <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> ((fabs_tpl(<a href="Vec3_tpl#004E">x</a>-v1.<a href="Vec3_tpl#004E">x</a>) <= epsilon) && (fabs_tpl(<a href="Vec3_tpl#004F">y</a>-v1.<a href="Vec3_tpl#004F">y</a>) <= epsilon)&& (fabs_tpl(<a href="Vec3_tpl#0050">z</a>-v1.<a href="Vec3_tpl#0050">z</a>) <= epsilon)); } <strong><span style="color: #871F78">bool</span></strong> IsInRangePI() <strong><span style="color: #871F78">const</span></strong> { F pi=(F)(<a href="Math_Definitions#000A">gf_PI</a>+0.001); <strong><span style="color: #871F78">return</span></strong> ( (<a href="Vec3_tpl#004E">x</a>>-pi)&&(<a href="Vec3_tpl#004E">x</a><pi) && (<a href="Vec3_tpl#004F">y</a>>-pi)&&(<a href="Vec3_tpl#004F">y</a><pi) && (<a href="Vec3_tpl#0050">z</a>>-pi)&&(<a href="Vec3_tpl#0050">z</a><pi) ); } <strong><span style="color: #871F78">void</span></strong> RangePI() { <strong><span style="color: #871F78">const</span></strong> F modX = fmod(<a href="Vec3_tpl#004E">x</a>+<a href="Math_Definitions#000A">gf_PI</a>, <a href="Math_Definitions#000B">gf_PI2</a>); <a href="Vec3_tpl#004E">x</a> = if_neg_else(modX, modX+<a href="Math_Definitions#000A">gf_PI</a>, modX - <a href="Math_Definitions#000A">gf_PI</a>); <strong><span style="color: #871F78">const</span></strong> F modY = fmod(<a href="Vec3_tpl#004F">y</a>+<a href="Math_Definitions#000A">gf_PI</a>, <a href="Math_Definitions#000B">gf_PI2</a>); <a href="Vec3_tpl#004F">y</a> = if_neg_else(modY, modY+<a href="Math_Definitions#000A">gf_PI</a>, modY - <a href="Math_Definitions#000A">gf_PI</a>); <strong><span style="color: #871F78">const</span></strong> F modZ = fmod(<a href="Vec3_tpl#0050">z</a>+<a href="Math_Definitions#000A">gf_PI</a>, <a href="Math_Definitions#000B">gf_PI2</a>); <a href="Vec3_tpl#0050">z</a> = if_neg_else(modZ, modZ+<a href="Math_Definitions#000A">gf_PI</a>, modZ - <a href="Math_Definitions#000A">gf_PI</a>); } <strong><span style="color: #871F78">template</span></strong><<strong><span style="color: #871F78">class</span></strong> F1> <strong><span style="color: #871F78">explicit</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a>( <strong><span style="color: #871F78">const</span></strong> <a href="Quat_tpl">Quat_tpl</a><F1>& q ) { assert(q.IsValid()); <a href="Vec3_tpl#004F">y</a> = F( asin_tpl(max((F)-1.0,min((F)1.0,-(q.v.<a href="Vec3_tpl#004E">x</a>*q.v.<a href="Vec3_tpl#0050">z</a>-q.w*q.v.<a href="Vec3_tpl#004F">y</a>)*2))) ); <strong><span style="color: #871F78">if</span></strong> (fabs_tpl(fabs_tpl(<a href="Vec3_tpl#004F">y</a>)-(F)((F)<a href="Math_Definitions#0008">g_PI</a>*(F)0.5))<(F)0.01) { <a href="Vec3_tpl#004E">x</a> = F(0); <a href="Vec3_tpl#0050">z</a> = F(atan2_tpl(-2*(q.v.<a href="Vec3_tpl#004E">x</a>*q.v.<a href="Vec3_tpl#004F">y</a>-q.w*q.v.<a href="Vec3_tpl#0050">z</a>),1-(q.v.<a href="Vec3_tpl#004E">x</a>*q.v.<a href="Vec3_tpl#004E">x</a>+q.v.<a href="Vec3_tpl#0050">z</a>*q.v.<a href="Vec3_tpl#0050">z</a>)*2)); } <strong><span style="color: #871F78">else</span></strong> { <a href="Vec3_tpl#004E">x</a> = F(atan2_tpl((q.v.<a href="Vec3_tpl#004F">y</a>*q.v.<a href="Vec3_tpl#0050">z</a>+q.w*q.v.<a href="Vec3_tpl#004E">x</a>)*2, 1-(q.v.<a href="Vec3_tpl#004E">x</a>*q.v.<a href="Vec3_tpl#004E">x</a>+q.v.<a href="Vec3_tpl#004F">y</a>*q.v.<a href="Vec3_tpl#004F">y</a>)*2)); <a href="Vec3_tpl#0050">z</a> = F(atan2_tpl((q.v.<a href="Vec3_tpl#004E">x</a>*q.v.<a href="Vec3_tpl#004F">y</a>+q.w*q.v.<a href="Vec3_tpl#0050">z</a>)*2, 1-(q.v.<a href="Vec3_tpl#0050">z</a>*q.v.<a href="Vec3_tpl#0050">z</a>+q.v.<a href="Vec3_tpl#004F">y</a>*q.v.<a href="Vec3_tpl#004F">y</a>)*2)); } } <strong><span style="color: #871F78">template</span></strong><<strong><span style="color: #871F78">class</span></strong> F1> <strong><span style="color: #871F78">explicit</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a>( <strong><span style="color: #871F78">const</span></strong> Matrix33_tpl<F1>& m ) { assert( m.IsOrthonormalRH(0.001f) ); <a href="Vec3_tpl#004F">y</a> = (F)asin_tpl(max((F)-1.0,min((F)1.0,-m.m20))); <strong><span style="color: #871F78">if</span></strong> (fabs_tpl(fabs_tpl(<a href="Vec3_tpl#004F">y</a>)-(F)((F)<a href="Math_Definitions#0008">g_PI</a>*(F)0.5))<(F)0.01) { <a href="Vec3_tpl#004E">x</a> = F(0); <a href="Vec3_tpl#0050">z</a> = F(atan2_tpl(-m.m01,m.m11)); } <strong><span style="color: #871F78">else</span></strong> { <a href="Vec3_tpl#004E">x</a> = F(atan2_tpl(m.m21, m.m22)); <a href="Vec3_tpl#0050">z</a> = F(atan2_tpl(m.m10, m.m00)); } } <strong><span style="color: #871F78">template</span></strong><<strong><span style="color: #871F78">class</span></strong> F1> <strong><span style="color: #871F78">explicit</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a>( <strong><span style="color: #871F78">const</span></strong> Matrix34_tpl<F1>& m ) { assert( m.IsOrthonormalRH(0.001f) ); <a href="Vec3_tpl#004F">y</a> = F( asin_tpl(max((F)-1.0,min((F)1.0,-m.m20))) ); <strong><span style="color: #871F78">if</span></strong> (fabs_tpl(fabs_tpl(<a href="Vec3_tpl#004F">y</a>)-(F)((F)<a href="Math_Definitions#0008">g_PI</a>*(F)0.5))<(F)0.01) { <a href="Vec3_tpl#004E">x</a> = F(0); <a href="Vec3_tpl#0050">z</a> = F(atan2_tpl(-m.m01,m.m11)); } <strong><span style="color: #871F78">else</span></strong> { <a href="Vec3_tpl#004E">x</a> = F(atan2_tpl(m.m21, m.m22)); <a href="Vec3_tpl#0050">z</a> = F(atan2_tpl(m.m10, m.m00)); } } <strong><span style="color: #871F78">template</span></strong><<strong><span style="color: #871F78">class</span></strong> F1> <strong><span style="color: #871F78">explicit</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a>( <strong><span style="color: #871F78">const</span></strong> Matrix44_tpl<F1>& m ) { assert( Matrix33(m).IsOrthonormalRH(0.001f) ); <a href="Vec3_tpl#004F">y</a> = F( asin_tpl(max((F)-1.0,min((F)1.0,-m.m20))) ); <strong><span style="color: #871F78">if</span></strong> (fabs_tpl(fabs_tpl(<a href="Vec3_tpl#004F">y</a>)-(F)((F)<a href="Math_Definitions#0008">g_PI</a>*(F)0.5))<(F)0.01) { <a href="Vec3_tpl#004E">x</a> = F(0); <a href="Vec3_tpl#0050">z</a> = F(atan2_tpl(-m.m01,m.m11)); } <strong><span style="color: #871F78">else</span></strong> { <a href="Vec3_tpl#004E">x</a> = F(atan2_tpl(m.m21, m.m22)); <a href="Vec3_tpl#0050">z</a> = F(atan2_tpl(m.m10, m.m00)); } } <strong><span style="color: #871F78">template</span></strong><<strong><span style="color: #871F78">typename</span></strong> F1> <strong><span style="color: #871F78">static</span></strong> F CreateRadZ( <strong><span style="color: #871F78">const</span></strong> <a href="Vec2_tpl">Vec2_tpl</a><F1>& v0, <strong><span style="color: #871F78">const</span></strong> <a href="Vec2_tpl">Vec2_tpl</a><F1>& v1 ) { F cz = v0.<a href="Vec3_tpl#004E">x</a>*v1.<a href="Vec3_tpl#004F">y</a>-v0.<a href="Vec3_tpl#004F">y</a>*v1.<a href="Vec3_tpl#004E">x</a>; F c = v0.<a href="Vec3_tpl#004E">x</a>*v1.<a href="Vec3_tpl#004E">x</a>+v0.<a href="Vec3_tpl#004F">y</a>*v1.<a href="Vec3_tpl#004F">y</a>; <strong><span style="color: #871F78">return</span></strong> F( atan2_tpl(cz,c) ); } <strong><span style="color: #871F78">template</span></strong><<strong><span style="color: #871F78">typename</span></strong> F1> <strong><span style="color: #871F78">static</span></strong> F CreateRadZ( <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F1>& v0, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F1>& v1 ) { F cz = v0.<a href="Vec3_tpl#004E">x</a>*v1.<a href="Vec3_tpl#004F">y</a>-v0.<a href="Vec3_tpl#004F">y</a>*v1.<a href="Vec3_tpl#004E">x</a>; F c = v0.<a href="Vec3_tpl#004E">x</a>*v1.<a href="Vec3_tpl#004E">x</a>+v0.<a href="Vec3_tpl#004F">y</a>*v1.<a href="Vec3_tpl#004F">y</a>; <strong><span style="color: #871F78">return</span></strong> F( atan2_tpl(cz,c) ); } <strong><span style="color: #871F78">template</span></strong><<strong><span style="color: #871F78">typename</span></strong> F1> <strong><span style="color: #871F78">static</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><F> GetAnglesXYZ( <strong><span style="color: #871F78">const</span></strong> <a href="Quat_tpl">Quat_tpl</a><F1>& q ) { <strong><span style="color: #871F78">return</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><F>(q); } <strong><span style="color: #871F78">template</span></strong><<strong><span style="color: #871F78">typename</span></strong> F1> <strong><span style="color: #871F78">void</span></strong> SetAnglesXYZ( <strong><span style="color: #871F78">const</span></strong> <a href="Quat_tpl">Quat_tpl</a><F1>& q ) { *<strong><span style="color: #871F78">this</span></strong>=<a href="Vec3_tpl#0011">Ang3_tpl</a><F>(q); } <strong><span style="color: #871F78">template</span></strong><<strong><span style="color: #871F78">typename</span></strong> F1> <strong><span style="color: #871F78">static</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><F> GetAnglesXYZ( <strong><span style="color: #871F78">const</span></strong> Matrix33_tpl<F1>& m ) { <strong><span style="color: #871F78">return</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><F>(m); } <strong><span style="color: #871F78">template</span></strong><<strong><span style="color: #871F78">typename</span></strong> F1> <strong><span style="color: #871F78">void</span></strong> SetAnglesXYZ( <strong><span style="color: #871F78">const</span></strong> Matrix33_tpl<F1>& m ) { *<strong><span style="color: #871F78">this</span></strong>=<a href="Vec3_tpl#0011">Ang3_tpl</a><F>(m); } <strong><span style="color: #871F78">template</span></strong><<strong><span style="color: #871F78">typename</span></strong> F1> <strong><span style="color: #871F78">static</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><F> GetAnglesXYZ( <strong><span style="color: #871F78">const</span></strong> Matrix34_tpl<F1>& m ) { <strong><span style="color: #871F78">return</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><F>(m); } <strong><span style="color: #871F78">template</span></strong><<strong><span style="color: #871F78">typename</span></strong> F1> <strong><span style="color: #871F78">void</span></strong> SetAnglesXYZ( <strong><span style="color: #871F78">const</span></strong> Matrix34_tpl<F1>& m ) { *<strong><span style="color: #871F78">this</span></strong>=<a href="Vec3_tpl#0011">Ang3_tpl</a><F>(m); } F &<strong><span style="color: #871F78">operator</span></strong> [] (<strong><span style="color: #871F78">int</span></strong> index) { assert(index>=0 && index<=2); <strong><span style="color: #871F78">return</span></strong> ((F*)<strong><span style="color: #871F78">this</span></strong>)[index]; } F <strong><span style="color: #871F78">operator</span></strong> [] (<strong><span style="color: #871F78">int</span></strong> index) <strong><span style="color: #871F78">const</span></strong> { assert(index>=0 && index<=2); <strong><span style="color: #871F78">return</span></strong> ((F*)<strong><span style="color: #871F78">this</span></strong>)[index]; } <strong><span style="color: #871F78">bool</span></strong> IsValid() <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">if</span></strong> (!NumberValid(<a href="Vec3_tpl#004E">x</a>)) <strong><span style="color: #871F78">return</span></strong> <strong><span style="color: #871F78">false</span></strong>; <strong><span style="color: #871F78">if</span></strong> (!NumberValid(<a href="Vec3_tpl#004F">y</a>)) <strong><span style="color: #871F78">return</span></strong> <strong><span style="color: #871F78">false</span></strong>; <strong><span style="color: #871F78">if</span></strong> (!NumberValid(<a href="Vec3_tpl#0050">z</a>)) <strong><span style="color: #871F78">return</span></strong> <strong><span style="color: #871F78">false</span></strong>; <strong><span style="color: #871F78">return</span></strong> <strong><span style="color: #871F78">true</span></strong>; } AUTO_STRUCT_INFO };</pre></div></div> <div class="Element6"> <a name="001D"></a>Vec3_tpl::Ang3_tpl::Ang3 Nested Type</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">typedef</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><f32> <strong><span style="color: #660000">Ang3</span></strong>;</pre></div></div> <div class="Element6"> <a name="001E"></a>Vec3_tpl::Ang3_tpl::Ang3_f64 Nested Type</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">typedef</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><f64> <strong><span style="color: #660000">Ang3_f64</span></strong>;</pre></div></div> <div class="Element6"> <a name="0023"></a>Vec3_tpl::Ang3_tpl::Ang3r Nested Type</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">typedef</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><real> <strong><span style="color: #660000">Ang3r</span></strong>;</pre></div></div> <div class="Element6"> <a name="0024"></a>Vec3_tpl::Ang3_tpl::AngleAxis Nested Type</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">typedef</span></strong> <a href="Vec3_tpl#0026">AngleAxis_tpl</a><f32> <strong><span style="color: #660000">AngleAxis</span></strong>;</pre></div></div> <div class="Element6"> <a name="0025"></a>Vec3_tpl::Ang3_tpl::AngleAxis_f64 Nested Type</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">typedef</span></strong> <a href="Vec3_tpl#0026">AngleAxis_tpl</a><f64> <strong><span style="color: #660000">AngleAxis_f64</span></strong>;</pre></div></div> <div class="Element6"> <a name="006F"></a>Vec3_tpl::x Data Member</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100">F <strong><span style="color: #660000">x</span></strong>;</pre></div></div> <div class="Element6"> <a name="0070"></a>Vec3_tpl::y Data Member</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100">F <strong><span style="color: #660000">y</span></strong>;</pre></div></div> <div class="Element6"> <a name="0071"></a>Vec3_tpl::z Data Member</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100">F <strong><span style="color: #660000">z</span></strong>;</pre></div></div> <div class="Element6"> <a name="0007"></a>Vec3_tpl::- Operator (Vec2_tpl<F1> &, Vec3_tpl<F2> &)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> F1,<strong><span style="color: #871F78">class</span></strong> F2> <a href="Vec3_tpl">Vec3_tpl</a><F1> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">-</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec2_tpl">Vec2_tpl</a><F1> & <strong><span style="color: #660000">v0</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F2> & <strong><span style="color: #660000">v1</span></strong>);</pre></div></div> <div class="Element6"> <a name="0008"></a>Vec3_tpl::- Operator (Vec3_tpl<F1> &, Vec2_tpl<F2> &)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> F1,<strong><span style="color: #871F78">class</span></strong> F2> <a href="Vec3_tpl">Vec3_tpl</a><F1> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">-</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F1> & <strong><span style="color: #660000">v0</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec2_tpl">Vec2_tpl</a><F2> & <strong><span style="color: #660000">v1</span></strong>);</pre></div></div> <div class="Element6"> <a name="0009"></a>Vec3_tpl::- Operator (Vec3_tpl<F1> &, Vec3_tpl<F2> &)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> F1,<strong><span style="color: #871F78">class</span></strong> F2> <a href="Vec3_tpl">Vec3_tpl</a><F1> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">-</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F1> & <strong><span style="color: #660000">v0</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F2> & <strong><span style="color: #660000">v1</span></strong>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> <a href="vector">vector</a> subtraction</p></div> </div> <div class="Element6"> <a name="0001"></a>Vec3_tpl::% Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> F1,<strong><span style="color: #871F78">class</span></strong> F2> <a href="Vec3_tpl">Vec3_tpl</a><F1> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">%</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F1> & <strong><span style="color: #660000">v0</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F2> & <strong><span style="color: #660000">v1</span></strong>);</pre></div></div> <div class="Element6"> <a name="0002"></a>Vec3_tpl::() Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">void</span></strong> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">()</span></strong>(F <strong><span style="color: #660000">vx</span></strong>, F <strong><span style="color: #660000">vy</span></strong>, F <strong><span style="color: #660000">vz</span></strong>);</pre></div></div> <div class="Element6"> <a name="0003"></a>Vec3_tpl::* Operator (F)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><a href="Vec3_tpl">Vec3_tpl</a><F> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">*</span></strong>(F <strong><span style="color: #660000">k</span></strong>) <strong><span style="color: #871F78">const</span></strong>;</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> !</p> <ul class="Element630"> <li class="Element600">overloaded arithmetic operator </li> </ul><p class="Element10"> *</p> <ul class="Element630"> <li class="Element600">Example:</li> <li class="Element600"><a href="Vec3_tpl#0059">Vec3</a> v0=v1*4;</li> </ul></div> </div> <div class="Element6"> <a name="0004"></a>Vec3_tpl::* Operator (Vec3_tpl<F1> &, Vec3_tpl<F2> &)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> F1,<strong><span style="color: #871F78">class</span></strong> F2> F1 <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">*</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F1> & <strong><span style="color: #660000">v0</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F2> & <strong><span style="color: #660000">v1</span></strong>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> dot product (2 versions)</p></div> </div> <div class="Element6"> <a name="0005"></a>Vec3_tpl::/ Operator (F)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><a href="Vec3_tpl">Vec3_tpl</a><F> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">/</span></strong>(F <strong><span style="color: #660000">k</span></strong>) <strong><span style="color: #871F78">const</span></strong>;</pre></div></div> <div class="Element6"> <a name="0006"></a>Vec3_tpl::/ Operator (Vec3_tpl<F1> &, Vec3_tpl<F2> &)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> F1,<strong><span style="color: #871F78">class</span></strong> F2> <a href="Vec3_tpl">Vec3_tpl</a><F1> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">/</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F1> & <strong><span style="color: #660000">v0</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F2> & <strong><span style="color: #660000">v1</span></strong>);</pre></div></div> <div class="Element6"> <a name="000A"></a>Vec3_tpl::^ Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> F1,<strong><span style="color: #871F78">class</span></strong> F2> <a href="Vec3_tpl">Vec3_tpl</a><F1> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">^</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F1> & <strong><span style="color: #660000">v0</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F2> & <strong><span style="color: #660000">v1</span></strong>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> cross product (2 versions)</p></div> </div> <div class="Element6"> <a name="000B"></a>Vec3_tpl::| Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> F1,<strong><span style="color: #871F78">class</span></strong> F2> F1 <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">|</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F1> & <strong><span style="color: #660000">v0</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F2> & <strong><span style="color: #660000">v1</span></strong>);</pre></div></div> <div class="Element6"> <a name="000C"></a>Vec3_tpl::+ Operator (Vec2_tpl<F1> &, Vec3_tpl<F2> &)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> F1,<strong><span style="color: #871F78">class</span></strong> F2> <a href="Vec3_tpl">Vec3_tpl</a><F1> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">+</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec2_tpl">Vec2_tpl</a><F1> & <strong><span style="color: #660000">v0</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F2> & <strong><span style="color: #660000">v1</span></strong>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> <a href="vector">vector</a> addition</p></div> </div> <div class="Element6"> <a name="000D"></a>Vec3_tpl::+ Operator (Vec3_tpl<F1> &, Vec2_tpl<F2> &)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> F1,<strong><span style="color: #871F78">class</span></strong> F2> <a href="Vec3_tpl">Vec3_tpl</a><F1> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">+</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F1> & <strong><span style="color: #660000">v0</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec2_tpl">Vec2_tpl</a><F2> & <strong><span style="color: #660000">v1</span></strong>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> <a href="vector">vector</a> addition</p></div> </div> <div class="Element6"> <a name="000E"></a>Vec3_tpl::+ Operator (Vec3_tpl<F1> &, Vec3_tpl<F2> &)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> F1,<strong><span style="color: #871F78">class</span></strong> F2> <a href="Vec3_tpl">Vec3_tpl</a><F1> <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">+</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F1> & <strong><span style="color: #660000">v0</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F2> & <strong><span style="color: #660000">v1</span></strong>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> <a href="vector">vector</a> addition</p></div> </div> <div class="Element6"> <a name="000F"></a>Vec3_tpl::+= Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> F1,<strong><span style="color: #871F78">class</span></strong> F2> <a href="Vec3_tpl">Vec3_tpl</a><F1>& <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">+=</span></strong>(<a href="Vec3_tpl">Vec3_tpl</a><F1> & <strong><span style="color: #660000">v0</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F2> & <strong><span style="color: #660000">v1</span></strong>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> <a href="vector">vector</a> self-addition</p></div> </div> <div class="Element6"> <a name="0010"></a>Vec3_tpl::-= Operator</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> F1,<strong><span style="color: #871F78">class</span></strong> F2> <a href="Vec3_tpl">Vec3_tpl</a><F1>& <strong><span style="color: #871F78">operator</span></strong> <strong><span style="color: #660000">-=</span></strong>(<a href="Vec3_tpl">Vec3_tpl</a><F1> & <strong><span style="color: #660000">v0</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F2> & <strong><span style="color: #660000">v1</span></strong>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> <a href="vector">vector</a> self-subtraction</p></div> </div> <div class="Element6"> <a name="0051"></a>Vec3_tpl::BiRandom Method</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><a href="Vec3_tpl#0059">Vec3</a> <strong><span style="color: #660000">BiRandom</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0059">Vec3</a>& <strong><span style="color: #660000">vRange</span></strong>);</pre></div></div> <div class="Element6"> <a name="0053"></a>Vec3_tpl::IsEquivalent Method</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> F> <strong><span style="color: #871F78">bool</span></strong> <strong><span style="color: #660000">IsEquivalent</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> & <strong><span style="color: #660000">v0</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> & <strong><span style="color: #660000">v1</span></strong>, f32 <strong><span style="color: #660000">epsilon</span></strong> = <a href="Math_Macros#002C">VEC_EPSILON</a>);</pre></div></div> <div class="Element6"> <a name="0054"></a>Vec3_tpl::Random Method (Vec3&)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><a href="Vec3_tpl#0059">Vec3</a> <strong><span style="color: #660000">Random</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0059">Vec3</a>& <strong><span style="color: #660000">v</span></strong>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> Random <a href="vector">vector</a> functions.</p></div> </div> <div class="Element6"> <a name="0055"></a>Vec3_tpl::Random Method (Vec3&, Vec3&)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><a href="Vec3_tpl#0059">Vec3</a> <strong><span style="color: #660000">Random</span></strong>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0059">Vec3</a>& <strong><span style="color: #660000">a</span></strong>, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0059">Vec3</a>& <strong><span style="color: #660000">b</span></strong>);</pre></div></div> <div class="Element6"> <a name="0056"></a>Vec3_tpl::Set Method</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><a href="Vec3_tpl">Vec3_tpl</a><F>& <strong><span style="color: #660000">Set</span></strong>(<strong><span style="color: #871F78">const</span></strong> F <strong><span style="color: #660000">xval</span></strong>, <strong><span style="color: #871F78">const</span></strong> F <strong><span style="color: #660000">yval</span></strong>, <strong><span style="color: #871F78">const</span></strong> F <strong><span style="color: #660000">zval</span></strong>);</pre></div></div> <div class="Element6"> <a name="0057"></a>Vec3_tpl::SphereRandom Method</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><a href="Vec3_tpl#0059">Vec3</a> <strong><span style="color: #660000">SphereRandom</span></strong>(<strong><span style="color: #871F78">float</span></strong> <strong><span style="color: #660000">fRadius</span></strong>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> <a href="Vec3_tpl#0054">Random</a> point in sphere.</p></div> </div> <div class="Element6"> <a name="005A"></a>Vec3_tpl::Vec3_tpl Constructor ()</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #660000">Vec3_tpl</span></strong>();</pre></div></div> <div class="Element6"> <a name="005B"></a>Vec3_tpl::Vec3_tpl Constructor (Ang3_tpl<F>&)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">explicit</span></strong> <strong><span style="color: #660000">Vec3_tpl</span></strong><F>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><F>& <strong><span style="color: #660000">v</span></strong>);</pre></div></div> <div class="Element6"> <a name="005C"></a>Vec3_tpl::Vec3_tpl Constructor (Ang3_tpl<T>&)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> T> <strong><span style="color: #871F78">explicit</span></strong> <strong><span style="color: #660000">Vec3_tpl</span></strong><F>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl#0011">Ang3_tpl</a><T>& <strong><span style="color: #660000">v</span></strong>);</pre></div></div> <div class="Element6"> <a name="005D"></a>Vec3_tpl::Vec3_tpl Constructor (F)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">explicit</span></strong> <strong><span style="color: #660000">Vec3_tpl</span></strong>(F <strong><span style="color: #660000">f</span></strong>);</pre></div></div> <div class="Element6"> <a name="005E"></a>Vec3_tpl::Vec3_tpl Constructor (F, F, F)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #660000">Vec3_tpl</span></strong>(F <strong><span style="color: #660000">vx</span></strong>, F <strong><span style="color: #660000">vy</span></strong>, F <strong><span style="color: #660000">vz</span></strong>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> !</p> <ul class="Element630"> <li class="Element600">constructors and bracket-operator to initialize a <a href="vector">vector</a> </li> </ul><p class="Element10"> *</p> <ul class="Element630"> <li class="Element600">Example:</li> <li class="Element600"><a href="Vec3_tpl#0059">Vec3</a> v0=<a href="Vec3_tpl#0059">Vec3</a>(1,2,3);</li> <li class="Element600"><a href="Vec3_tpl#0059">Vec3</a> v1(1,2,3);</li> <li class="Element600">v2.<a href="Vec3_tpl#0056">Set</a>(1,2,3);</li> </ul></div> </div> <div class="Element6"> <a name="0062"></a>Vec3_tpl::Vec3_tpl Constructor (Vec2_tpl<F>&)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #660000">Vec3_tpl</span></strong><F>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec2_tpl">Vec2_tpl</a><F>& <strong><span style="color: #660000">v</span></strong>);</pre></div></div> <div class="Element6"> <a name="0063"></a>Vec3_tpl::Vec3_tpl Constructor (Vec2_tpl<T>&)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> T> <strong><span style="color: #660000">Vec3_tpl</span></strong><F>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec2_tpl">Vec2_tpl</a><T>& <strong><span style="color: #660000">v</span></strong>);</pre></div></div> <div class="Element6"> <a name="0064"></a>Vec3_tpl::Vec3_tpl Constructor (Vec3_tpl&)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #660000">Vec3_tpl</span></strong>(<strong><span style="color: #871F78">const</span></strong> Vec3_tpl& <strong><span style="color: #660000">v</span></strong>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> !</p> <ul class="Element630"> <li class="Element600">the copy/casting/assignement constructor </li> </ul><p class="Element10"> *</p> <ul class="Element630"> <li class="Element600">Example:</li> <li class="Element600"><a href="Vec3_tpl#0059">Vec3</a> v0=v1;</li> <li class="Element600"><a href="Vec3_tpl#0059">Vec3</a> v0=<a href="Vec3_tpl#0059">Vec3</a>(angle);</li> <li class="Element600"><a href="Vec3_tpl#0059">Vec3</a> v0=<a href="Vec3_tpl#0059">Vec3</a>(vector4);</li> </ul></div> </div> <div class="Element6"> <a name="0065"></a>Vec3_tpl::Vec3_tpl Constructor (Vec3_tpl<F1>&)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> F1> <strong><span style="color: #660000">Vec3_tpl</span></strong><F>(<strong><span style="color: #871F78">const</span></strong> Vec3_tpl<F1>& <strong><span style="color: #660000">v</span></strong>);</pre></div></div> <div class="Element6"> <a name="0066"></a>Vec3_tpl::Vec3_tpl Constructor (Vec4_tpl<F> &)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">explicit</span></strong> <strong><span style="color: #660000">Vec3_tpl</span></strong><F>(<strong><span style="color: #871F78">const</span></strong> Vec4_tpl<F> & <strong><span style="color: #660000">v</span></strong>);</pre></div></div> <div class="Element6"> <a name="0067"></a>Vec3_tpl::Vec3_tpl Constructor (Vec4_tpl<T> &)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> T> <strong><span style="color: #871F78">explicit</span></strong> <strong><span style="color: #660000">Vec3_tpl</span></strong><F>(<strong><span style="color: #871F78">const</span></strong> Vec4_tpl<T> & <strong><span style="color: #660000">v</span></strong>);</pre></div></div> <div class="Element6"> <a name="005F"></a>Vec3_tpl::Vec3_tpl Constructor (type_max)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #660000">Vec3_tpl</span></strong>(<a href="Math_Enums#0011">type_max</a>);</pre></div></div> <div class="Element6"> <a name="0060"></a>Vec3_tpl::Vec3_tpl Constructor (type_min)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #660000">Vec3_tpl</span></strong>(<a href="Math_Enums#0013">type_min</a>);</pre></div></div> <div class="Element6"> <a name="0061"></a>Vec3_tpl::Vec3_tpl Constructor (type_zero)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #660000">Vec3_tpl</span></strong>(<a href="Math_Enums#0015">type_zero</a>);</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> !</p> <ul class="Element630"> <li class="Element600">template specialization to initialize a <a href="vector">vector</a> </li> </ul><p class="Element10"> *</p> <ul class="Element630"> <li class="Element600">Example:</li> <li class="Element600"><a href="Vec3_tpl#0059">Vec3</a> v0=<a href="Vec3_tpl#0059">Vec3</a>(ZERO);</li> <li class="Element600"><a href="Vec3_tpl#0059">Vec3</a> v1=<a href="Vec3_tpl#0059">Vec3</a>(MIN);</li> <li class="Element600"><a href="Vec3_tpl#0059">Vec3</a> v2=<a href="Vec3_tpl#0059">Vec3</a>(MAX);</li> </ul></div> </div> <div class="Element6"> <a name="0068"></a>Vec3_tpl::Vec3_tpl<f32>::Vec3_tpl Method (type_max)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <> <strong><span style="color: #871F78">inline</span></strong> <strong><span style="color: #660000"><a href="Vec3_tpl">Vec3_tpl</a><f32>::<a href="Vec3_tpl">Vec3_tpl</a></span></strong>(<a href="Math_Enums#0011">type_max</a>);</pre></div></div> <div class="Element6"> <a name="0069"></a>Vec3_tpl::Vec3_tpl<f32>::Vec3_tpl Method (type_min)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <> <strong><span style="color: #871F78">inline</span></strong> <strong><span style="color: #660000"><a href="Vec3_tpl">Vec3_tpl</a><f32>::<a href="Vec3_tpl">Vec3_tpl</a></span></strong>(<a href="Math_Enums#0013">type_min</a>);</pre></div></div> <div class="Element6"> <a name="006A"></a>Vec3_tpl::Vec3_tpl<f64>::Vec3_tpl Method (type_max)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <> <strong><span style="color: #871F78">inline</span></strong> <strong><span style="color: #660000"><a href="Vec3_tpl">Vec3_tpl</a><f64>::<a href="Vec3_tpl">Vec3_tpl</a></span></strong>(<a href="Math_Enums#0011">type_max</a>);</pre></div></div> <div class="Element6"> <a name="006B"></a>Vec3_tpl::Vec3_tpl<f64>::Vec3_tpl Method (type_min)</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">template</span></strong> <> <strong><span style="color: #871F78">inline</span></strong> <strong><span style="color: #660000"><a href="Vec3_tpl">Vec3_tpl</a><f64>::<a href="Vec3_tpl">Vec3_tpl</a></span></strong>(<a href="Math_Enums#0013">type_min</a>);</pre></div></div> <div class="Element6"> <a name="0052"></a>friend Vec3_tpl<F> operator * (f32 f, const Vec3_tpl &vec) { return Vec3_tpl((F)(f*vec.x), (F)(f*vec.y), (F)(f*vec.z)); } Vec3_tpl<F>& operator *= (F k) { x*=k;y*=k;z*=k; return *this; } Vec3_tpl<F>& operator /= (F k) { k=(F)1.0/k; x*=k;y*=k;z*=k; return *this; } Vec3_tpl<F> operator - ( void ) const { return Vec3_tpl<F>(-x,-y,-z); } Vec3_tpl<F>& Flip() { x=-x; y=-y; z=-z; return *this; } F &operator [] (int32 index) { assert(index>=0 && index<=2); return ((F*)this)[index]; } F operator [] (int32 index) const { assert(index>=0 && index<=2); return ((F*)this)[index]; } bool operator==(const Vec3_tpl<F> &vec) { return x == vec.x && y == vec.y && z == vec.z; } bool operator!=(const Vec3_tpl<F> &vec) { return !(*this == vec); } friend bool operator ==(const Vec3_tpl<F> &v0, const Vec3_tpl<F> &v1) { return ((v0.x==v1.x) && (v0.y==v1.y) && (v0.z==v1.z)); } friend bool operator !=(const Vec3_tpl<F> &v0, const Vec3_tpl<F> &v1) { return !(v0==v1); } bool IsZero(F e = (F)0.0) const { return (fabs_tpl(x) <= e) && (fabs_tpl(y) <= e) && (fabs_tpl(z) <= e); } bool IsZeroFast(F e = (F)0.0003) const { return (fabs_tpl(x) + fabs_tpl(y) + fabs_tpl(z)) <= e; } bool IsEquivalent(const Vec3_tpl<F> &v1, F epsilon=VEC_EPSILON) const { assert(v1.IsValid()); assert(this->IsValid()); return ((fabs_tpl(x-v1.x) <= epsilon) && (fabs_tpl(y-v1.y) <= epsilon)&& (fabs_tpl(z-v1.z) <= epsilon)); } static bool IsEquivalent(const Vec3_tpl<F>& v0, const Vec3_tpl<F>& v1, F epsilon=VEC_EPSILON) { assert(v0.IsValid()); assert(v1.IsValid()); return ((fabs_tpl(v0.x-v1.x) <= epsilon) && (fabs_tpl(v0.y-v1.y) <= epsilon)&& (fabs_tpl(v0.z-v1.z) <= epsilon)); } bool IsUnit(F epsilon=VEC_EPSILON) const { return (fabs_tpl(1 - GetLengthSquared()) <= epsilon); } bool IsValid() const { if (!NumberValid(x)) return false; if (!NumberValid(y)) return false; if (!NumberValid(z)) return false; return true; } void SetLength(F fLen) { F fLenMe = GetLengthSquared(); if(fLenMe<0.00001f*0.00001f) return; fLenMe = fLen * isqrt_tpl(fLenMe); x*=fLenMe; y*=fLenMe; z*=fLenMe; } void ClampLength(F maxLength) { F sqrLength = GetLengthSquared(); if (sqrLength > (maxLength * maxLength)) { F scale = maxLength * isqrt_tpl(sqrLength); x *= scale; y *= scale; z *= scale; } } F GetLength() const { return sqrt_tpl(x*x+y*y+z*z); } F GetLengthFloat() const { return GetLength(); } F GetLengthFast() const { return sqrt_fast_tpl(x*x+y*y+z*z); } F GetLengthSquared() const { return x*x+y*y+z*z; } F GetLengthSquaredFloat() const { return GetLengthSquared(); } F GetLength2D() const { return sqrt_tpl(x*x+y*y); } F GetLengthSquared2D() const { return x*x+y*y; } F GetDistance(const Vec3_tpl<F> &vec1) const { return sqrt_tpl((x-vec1.x)*(x-vec1.x)+(y-vec1.y)*(y-vec1.y)+(z-vec1.z)*(z-vec1.z)); } F GetSquaredDistance ( const Vec3_tpl<F> &v) const { return (x-v.x)*(x-v.x) + (y-v.y)*(y-v.y) + (z-v.z)*(z-v.z); } F GetSquaredDistance2D ( const Vec3_tpl<F> &v) const { return (x-v.x)*(x-v.x) + (y-v.y)*(y-v.y); } void Normalize() { assert(this->IsValid()); F fInvLen = isqrt_safe_tpl( x*x+y*y+z*z ); x*=fInvLen; y*=fInvLen; z*=fInvLen; } void NormalizeFast() { assert(this->IsValid()); F fInvLen = isqrt_fast_tpl( x*x+y*y+z*z ); x*=fInvLen; y*=fInvLen; z*=fInvLen; } F NormalizeSafe(const struct Vec3_tpl<F>& safe = Vec3Constants<F>::fVec3_Zero) { assert(this->IsValid()); F fLen2 = x*x+y*y+z*z; IF (VecPrecisionValues<F>::CheckGreater(fLen2), 1) { F fInvLen = isqrt_tpl(fLen2); x*=fInvLen; y*=fInvLen; z*=fInvLen; return F(1) / fInvLen; } else { *this = safe; return F(0); } } Vec3_tpl GetNormalizedFloat() const { return GetNormalized(); } Vec3_tpl GetNormalized() const { F fInvLen = isqrt_safe_tpl( x*x+y*y+z*z ); return *this * fInvLen; } Vec3_tpl GetNormalizedFast() const { F fInvLen = isqrt_fast_tpl( x*x+y*y+z*z ); return *this * fInvLen; } Vec3_tpl GetNormalizedSafe(const struct Vec3_tpl<F>& safe = Vec3Constants<F>::fVec3_OneX) const { F fLen2 = x*x+y*y+z*z; IF (VecPrecisionValues<F>::CheckGreater(fLen2), 1) { F fInvLen = isqrt_tpl(fLen2); return *this * fInvLen; } else { return safe; } } Vec3_tpl GetNormalizedSafeFloat(const struct Vec3_tpl<F>& safe = Vec3Constants<F>::fVec3_OneX) const { return GetNormalizedSafe(safe); } Vec3_tpl GetPermutated(int new_z) const { return Vec3_tpl(*(&x+inc_mod3[new_z]), *(&x+dec_mod3[new_z]), *(&x+new_z)); } F GetVolume() const { return x*y*z; } Vec3_tpl<F> abs() const { return Vec3_tpl(fabs_tpl(x),fabs_tpl(y),fabs_tpl(z)); } void CheckMin(const Vec3_tpl<F> other) { x = min(other.x,x); y = min(other.y,y); z = min(other.z,z); } void CheckMax(const Vec3_tpl<F> other) { x = max(other.x,x); y = max(other.y,y); z = max(other.z,z); } void SetOrthogonal( const Vec3_tpl<F>& v ) { sqr(F(0.9))*(v|v)-v.x*v.x<0 ? (x=-v.z,y=0,z=v.x) : (x=0,y=v.z,z=-v.y); } Vec3_tpl GetOrthogonal() const { return sqr(F(0.9))*(x*x+y*y+z*z)-x*x<0 ? Vec3_tpl<F>(-z,0,x) : Vec3_tpl<F>(0,z,-y); } void SetProjection( const Vec3_tpl& i, const Vec3_tpl& n ) { *this = i-n*(n|i); } static Vec3_tpl<F> CreateProjection( const Vec3_tpl& i, const Vec3_tpl& n ) { return i-n*(n|i); } void SetReflection( const Vec3_tpl<F>& i, const Vec3_tpl<F>& n) { *this=(n*(i|n)*2)-i; } static Vec3_tpl<F> CreateReflection( const Vec3_tpl<F>& i, const Vec3_tpl<F>& n ) { return (n*(i|n)*2)-i; } void SetLerp( const Vec3_tpl<F>& p, const Vec3_tpl<F>& q, F t ) { const Vec3_tpl<F> diff = q-p; *this = p + (diff*t); } static Vec3_tpl<F> CreateLerp( const Vec3_tpl<F>& p, const Vec3_tpl<F>& q, F t ) { const Vec3_tpl<F> diff = q-p; return p+(diff*t); } void SetSlerp( const Vec3_tpl<F>& p, const Vec3_tpl<F>& q, F t ) { assert(p.IsUnit(0.005f)); assert(q.IsUnit(0.005f)); F cosine = clamp_tpl((p|q), F(-1), F(1)); if(cosine>=(F)0.99) { SetLerp(p,q,t); Normalize(); } else { F rad = acos_tpl(cosine); F scale_0 = sin_tpl((1-t)*rad); F scale_1 = sin_tpl(t*rad); *this=(p*scale_0 + q*scale_1) / sin_tpl(rad); Normalize(); } } static Vec3_tpl<F> CreateSlerp( const Vec3_tpl<F>& p, const Vec3_tpl<F>& q, F t ) { Vec3_tpl<F> v; v.SetSlerp(p,q,t); return v; } void SetQuadraticCurve(const Vec3_tpl<F>& v0, const Vec3_tpl<F>& v1, const Vec3_tpl<F>& v2, F t1) { F t0=1.0f-t1; *this = t0*t0*v0 + t0*t1*2.0f*v1 + t1*t1*v2; } static Vec3_tpl<F> CreateQuadraticCurve(const Vec3_tpl<F>& v0, const Vec3_tpl<F>& v1, const Vec3_tpl<F>& v2, F t) { Vec3_tpl<F> ip; ip.SetQuadraticCurve(v0,v1,v2,t); return ip; } void SetCubicCurve(const Vec3_tpl<F>& v0, const Vec3_tpl<F>& v1, const Vec3_tpl<F>& v2, const Vec3_tpl<F>& v3, F t1) { F t0=1.0f-t1; *this=t0*t0*t0*v0 + 3*t0*t0*t1*v1 + 3*t0*t1*t1*v2 + t1*t1*t1*v3; } static Vec3_tpl<F> CreateCubicCurve(const Vec3_tpl<F>& v0, const Vec3_tpl<F>& v1, const Vec3_tpl<F>& v2, const Vec3_tpl<F>& v3, F t) { Vec3_tpl<F> ip; ip.SetCubicCurve(v0,v1,v2,v3,t); return ip; } void SetQuadraticSpline(const Vec3_tpl<F>& v0, const Vec3_tpl<F>& v1, const Vec3_tpl<F>& v2, F t) { SetQuadraticCurve(v0,v1-(v0*0.5f+v1+v2*0.5f-v1*2.0f),v2,t); } static Vec3_tpl<F> CreateQuadraticSpline(const Vec3_tpl<F>& v0, const Vec3_tpl<F>& v1, const Vec3_tpl<F>& v2, F t) { Vec3_tpl<F> ip; ip.SetQuadraticSpline(v0,v1,v2,t); return ip; } void SetRandomDirection( void ) { int nMax = 5; F Length2; do { x = 1.0f - 2.0f*cry_frand(); y = 1.0f - 2.0f*cry_frand(); z = 1.0f - 2.0f*cry_frand(); Length2 = len2(); nMax--; } while((Length2>1.0f || Length2<0.0001f) && nMax > 0); F InvScale = isqrt_tpl(Length2); x *= InvScale; y *= InvScale; z *= InvScale; } Vec3_tpl<F> GetRotated(const Vec3_tpl<F>& axis, F angle) const { return GetRotated(axis,cos_tpl(angle),sin_tpl(angle)); } Vec3_tpl<F> GetRotated(const Vec3_tpl<F>& axis, F cosa,F sina) const { Vec3_tpl<F> zax = axis*(*this|axis); Vec3_tpl<F> xax = *this-zax; Vec3_tpl<F> yax = axis%xax; return xax*cosa + yax*sina + zax; } Vec3_tpl<F> GetRotated(const Vec3_tpl& center,const Vec3_tpl<F>& axis, F angle) const { return center+(*this-center).GetRotated(axis,angle); } Vec3_tpl<F> GetRotated(const Vec3_tpl<F>& center,const Vec3_tpl<F>& axis, F cosa,F sina) const { return center+(*this-center).GetRotated(axis,cosa,sina); } Vec3_tpl CompMul( const Vec3_tpl<F> rhs ) const { return( Vec3_tpl( x * rhs.x, y * rhs.y, z * rhs.z ) ); } F Dot (const Vec3_tpl<F> v) const { return x*v.x + y*v.y + z*v.z; } Vec3_tpl<F> Cross (const Vec3_tpl<F> vec2) const { return Vec3_tpl<F>( y*vec2.z - z*vec2.y, z*vec2.x - x*vec2.z, x*vec2.y - y*vec2.x); } DEPRICATED operator F* () { return (F*)this; } template <class T> explicit DEPRICATED Vec3_tpl(const T *src) { x=src[0]; y=src[1]; z=src[2]; } Vec3_tpl& zero() { x=y=z=0; return *this; } F len() const { return sqrt_tpl(x*x+y*y+z*z); } F len2() const { return x*x +y*y + z*z; } Vec3_tpl& normalize() { F len2 = x*x+y*y+z*z; if (len2>(F)1e-20f) { F rlen = isqrt_tpl(len2); x*=rlen; y*=rlen; z*=rlen; } else Set(0,0,1); return *this; } Vec3_tpl normalized() const { F len2 = x*x+y*y+z*z; if (len2>(F)1e-20f) { F rlen = isqrt_tpl(len2); return Vec3_tpl(x*rlen,y*rlen,z*rlen); } else return Vec3_tpl(0,0,1); } template<class F1> Vec3_tpl<F1> sub(const Vec3_tpl<F1>& v) const { return Vec3_tpl<F1>(x-v.x, y-v.y, z-v.z); } template<class F1> Vec3_tpl<F1> scale(const F1 k) const { return Vec3_tpl<F>(x*k,y*k,z*k); } template<class F1> F1 dot(const Vec3_tpl<F1>& v) const { return (F1)(x*v.x+y*v.y+z*v.z); } template<class F1> Vec3_tpl<F1> cross(const Vec3_tpl<F1> &v) const { return Vec3_tpl<F1>(y*v.z-z*v.y, z*v.x-x*v.z, x*v.y-y*v.x); } AUTO_STRUCT_INFO } Friend</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">friend</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> <strong><span style="color: #871F78">operator</span></strong> * (f32 f, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a> &vec) { <strong><span style="color: #871F78">return</span></strong> <a href="Vec3_tpl">Vec3_tpl</a>((F)(f*vec.<a href="Vec3_tpl#006F">x</a>), (F)(f*vec.<a href="Vec3_tpl#0070">y</a>), (F)(f*vec.<a href="Vec3_tpl#0071">z</a>)); } <a href="Vec3_tpl">Vec3_tpl</a><F>& <strong><span style="color: #871F78">operator</span></strong> *= (F k) { <a href="Vec3_tpl#006F">x</a>*=k;<a href="Vec3_tpl#0070">y</a>*=k;<a href="Vec3_tpl#0071">z</a>*=k; <strong><span style="color: #871F78">return</span></strong> *<strong><span style="color: #871F78">this</span></strong>; } <a href="Vec3_tpl">Vec3_tpl</a><F>& <strong><span style="color: #871F78">operator</span></strong> /= (F k) { k=(F)1.0/k; <a href="Vec3_tpl#006F">x</a>*=k;<a href="Vec3_tpl#0070">y</a>*=k;<a href="Vec3_tpl#0071">z</a>*=k; <strong><span style="color: #871F78">return</span></strong> *<strong><span style="color: #871F78">this</span></strong>; } <a href="Vec3_tpl">Vec3_tpl</a><F> <strong><span style="color: #871F78">operator</span></strong> - ( <strong><span style="color: #871F78">void</span></strong> ) <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>(-<a href="Vec3_tpl#006F">x</a>,-<a href="Vec3_tpl#0070">y</a>,-<a href="Vec3_tpl#0071">z</a>); } <a href="Vec3_tpl">Vec3_tpl</a><F>& Flip() { <a href="Vec3_tpl#006F">x</a>=-<a href="Vec3_tpl#006F">x</a>; <a href="Vec3_tpl#0070">y</a>=-<a href="Vec3_tpl#0070">y</a>; <a href="Vec3_tpl#0071">z</a>=-<a href="Vec3_tpl#0071">z</a>; <strong><span style="color: #871F78">return</span></strong> *<strong><span style="color: #871F78">this</span></strong>; } F &<strong><span style="color: #871F78">operator</span></strong> [] (int32 index) { assert(index>=0 && index<=2); <strong><span style="color: #871F78">return</span></strong> ((F*)<strong><span style="color: #871F78">this</span></strong>)[index]; } F <strong><span style="color: #871F78">operator</span></strong> [] (int32 index) <strong><span style="color: #871F78">const</span></strong> { assert(index>=0 && index<=2); <strong><span style="color: #871F78">return</span></strong> ((F*)<strong><span style="color: #871F78">this</span></strong>)[index]; } <strong><span style="color: #871F78">bool</span></strong> <strong><span style="color: #871F78">operator</span></strong>==(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> &vec) { <strong><span style="color: #871F78">return</span></strong> <a href="Vec3_tpl#006F">x</a> == vec.<a href="Vec3_tpl#006F">x</a> && <a href="Vec3_tpl#0070">y</a> == vec.<a href="Vec3_tpl#0070">y</a> && <a href="Vec3_tpl#0071">z</a> == vec.<a href="Vec3_tpl#0071">z</a>; } <strong><span style="color: #871F78">bool</span></strong> <strong><span style="color: #871F78">operator</span></strong>!=(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> &vec) { <strong><span style="color: #871F78">return</span></strong> !(*<strong><span style="color: #871F78">this</span></strong> == vec); } <strong><span style="color: #871F78">friend</span></strong> <strong><span style="color: #871F78">bool</span></strong> <strong><span style="color: #871F78">operator</span></strong> ==(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> &v0, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> &v1) { <strong><span style="color: #871F78">return</span></strong> ((v0.<a href="Vec3_tpl#006F">x</a>==v1.<a href="Vec3_tpl#006F">x</a>) && (v0.<a href="Vec3_tpl#0070">y</a>==v1.<a href="Vec3_tpl#0070">y</a>) && (v0.<a href="Vec3_tpl#0071">z</a>==v1.<a href="Vec3_tpl#0071">z</a>)); } <strong><span style="color: #871F78">friend</span></strong> <strong><span style="color: #871F78">bool</span></strong> <strong><span style="color: #871F78">operator</span></strong> !=(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> &v0, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> &v1) { <strong><span style="color: #871F78">return</span></strong> !(v0==v1); } <strong><span style="color: #871F78">bool</span></strong> IsZero(F e = (F)0.0) <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> (fabs_tpl(<a href="Vec3_tpl#006F">x</a>) <= e) && (fabs_tpl(<a href="Vec3_tpl#0070">y</a>) <= e) && (fabs_tpl(<a href="Vec3_tpl#0071">z</a>) <= e); } <strong><span style="color: #871F78">bool</span></strong> IsZeroFast(F e = (F)0.0003) <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> (fabs_tpl(<a href="Vec3_tpl#006F">x</a>) + fabs_tpl(<a href="Vec3_tpl#0070">y</a>) + fabs_tpl(<a href="Vec3_tpl#0071">z</a>)) <= e; } <strong><span style="color: #871F78">bool</span></strong> <a href="Vec3_tpl#0053">IsEquivalent</a>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> &v1, F epsilon=<a href="Math_Macros#002C">VEC_EPSILON</a>) <strong><span style="color: #871F78">const</span></strong> { assert(v1.IsValid()); assert(<strong><span style="color: #871F78">this</span></strong>->IsValid()); <strong><span style="color: #871F78">return</span></strong> ((fabs_tpl(<a href="Vec3_tpl#006F">x</a>-v1.<a href="Vec3_tpl#006F">x</a>) <= epsilon) && (fabs_tpl(<a href="Vec3_tpl#0070">y</a>-v1.<a href="Vec3_tpl#0070">y</a>) <= epsilon)&& (fabs_tpl(<a href="Vec3_tpl#0071">z</a>-v1.<a href="Vec3_tpl#0071">z</a>) <= epsilon)); } <strong><span style="color: #871F78">static</span></strong> <strong><span style="color: #871F78">bool</span></strong> <a href="Vec3_tpl#0053">IsEquivalent</a>(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v0, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v1, F epsilon=<a href="Math_Macros#002C">VEC_EPSILON</a>) { assert(v0.IsValid()); assert(v1.IsValid()); <strong><span style="color: #871F78">return</span></strong> ((fabs_tpl(v0.<a href="Vec3_tpl#006F">x</a>-v1.<a href="Vec3_tpl#006F">x</a>) <= epsilon) && (fabs_tpl(v0.<a href="Vec3_tpl#0070">y</a>-v1.<a href="Vec3_tpl#0070">y</a>) <= epsilon)&& (fabs_tpl(v0.<a href="Vec3_tpl#0071">z</a>-v1.<a href="Vec3_tpl#0071">z</a>) <= epsilon)); } <strong><span style="color: #871F78">bool</span></strong> IsUnit(F epsilon=<a href="Math_Macros#002C">VEC_EPSILON</a>) <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> (fabs_tpl(1 - GetLengthSquared()) <= epsilon); } <strong><span style="color: #871F78">bool</span></strong> IsValid() <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">if</span></strong> (!NumberValid(<a href="Vec3_tpl#006F">x</a>)) <strong><span style="color: #871F78">return</span></strong> <strong><span style="color: #871F78">false</span></strong>; <strong><span style="color: #871F78">if</span></strong> (!NumberValid(<a href="Vec3_tpl#0070">y</a>)) <strong><span style="color: #871F78">return</span></strong> <strong><span style="color: #871F78">false</span></strong>; <strong><span style="color: #871F78">if</span></strong> (!NumberValid(<a href="Vec3_tpl#0071">z</a>)) <strong><span style="color: #871F78">return</span></strong> <strong><span style="color: #871F78">false</span></strong>; <strong><span style="color: #871F78">return</span></strong> <strong><span style="color: #871F78">true</span></strong>; } <strong><span style="color: #871F78">void</span></strong> SetLength(F fLen) { F fLenMe = GetLengthSquared(); <strong><span style="color: #871F78">if</span></strong>(fLenMe<0.00001f*0.00001f) <strong><span style="color: #871F78">return</span></strong>; fLenMe = fLen * isqrt_tpl(fLenMe); <a href="Vec3_tpl#006F">x</a>*=fLenMe; <a href="Vec3_tpl#0070">y</a>*=fLenMe; <a href="Vec3_tpl#0071">z</a>*=fLenMe; } <strong><span style="color: #871F78">void</span></strong> ClampLength(F maxLength) { F sqrLength = GetLengthSquared(); <strong><span style="color: #871F78">if</span></strong> (sqrLength > (maxLength * maxLength)) { F scale = maxLength * isqrt_tpl(sqrLength); <a href="Vec3_tpl#006F">x</a> *= scale; <a href="Vec3_tpl#0070">y</a> *= scale; <a href="Vec3_tpl#0071">z</a> *= scale; } } F GetLength() <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> sqrt_tpl(<a href="Vec3_tpl#006F">x</a>*<a href="Vec3_tpl#006F">x</a>+<a href="Vec3_tpl#0070">y</a>*<a href="Vec3_tpl#0070">y</a>+<a href="Vec3_tpl#0071">z</a>*<a href="Vec3_tpl#0071">z</a>); } F GetLengthFloat() <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> GetLength(); } F GetLengthFast() <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> sqrt_fast_tpl(<a href="Vec3_tpl#006F">x</a>*<a href="Vec3_tpl#006F">x</a>+<a href="Vec3_tpl#0070">y</a>*<a href="Vec3_tpl#0070">y</a>+<a href="Vec3_tpl#0071">z</a>*<a href="Vec3_tpl#0071">z</a>); } F GetLengthSquared() <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> <a href="Vec3_tpl#006F">x</a>*<a href="Vec3_tpl#006F">x</a>+<a href="Vec3_tpl#0070">y</a>*<a href="Vec3_tpl#0070">y</a>+<a href="Vec3_tpl#0071">z</a>*<a href="Vec3_tpl#0071">z</a>; } F GetLengthSquaredFloat() <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> GetLengthSquared(); } F GetLength2D() <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> sqrt_tpl(<a href="Vec3_tpl#006F">x</a>*<a href="Vec3_tpl#006F">x</a>+<a href="Vec3_tpl#0070">y</a>*<a href="Vec3_tpl#0070">y</a>); } F GetLengthSquared2D() <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> <a href="Vec3_tpl#006F">x</a>*<a href="Vec3_tpl#006F">x</a>+<a href="Vec3_tpl#0070">y</a>*<a href="Vec3_tpl#0070">y</a>; } F GetDistance(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> &vec1) <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> sqrt_tpl((<a href="Vec3_tpl#006F">x</a>-vec1.<a href="Vec3_tpl#006F">x</a>)*(<a href="Vec3_tpl#006F">x</a>-vec1.<a href="Vec3_tpl#006F">x</a>)+(<a href="Vec3_tpl#0070">y</a>-vec1.<a href="Vec3_tpl#0070">y</a>)*(<a href="Vec3_tpl#0070">y</a>-vec1.<a href="Vec3_tpl#0070">y</a>)+(<a href="Vec3_tpl#0071">z</a>-vec1.<a href="Vec3_tpl#0071">z</a>)*(<a href="Vec3_tpl#0071">z</a>-vec1.<a href="Vec3_tpl#0071">z</a>)); } F GetSquaredDistance ( <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> &v) <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> (<a href="Vec3_tpl#006F">x</a>-v.<a href="Vec3_tpl#006F">x</a>)*(<a href="Vec3_tpl#006F">x</a>-v.<a href="Vec3_tpl#006F">x</a>) + (<a href="Vec3_tpl#0070">y</a>-v.<a href="Vec3_tpl#0070">y</a>)*(<a href="Vec3_tpl#0070">y</a>-v.<a href="Vec3_tpl#0070">y</a>) + (<a href="Vec3_tpl#0071">z</a>-v.<a href="Vec3_tpl#0071">z</a>)*(<a href="Vec3_tpl#0071">z</a>-v.<a href="Vec3_tpl#0071">z</a>); } F GetSquaredDistance2D ( <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> &v) <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> (<a href="Vec3_tpl#006F">x</a>-v.<a href="Vec3_tpl#006F">x</a>)*(<a href="Vec3_tpl#006F">x</a>-v.<a href="Vec3_tpl#006F">x</a>) + (<a href="Vec3_tpl#0070">y</a>-v.<a href="Vec3_tpl#0070">y</a>)*(<a href="Vec3_tpl#0070">y</a>-v.<a href="Vec3_tpl#0070">y</a>); } <strong><span style="color: #871F78">void</span></strong> Normalize() { assert(<strong><span style="color: #871F78">this</span></strong>->IsValid()); F fInvLen = isqrt_safe_tpl( <a href="Vec3_tpl#006F">x</a>*<a href="Vec3_tpl#006F">x</a>+<a href="Vec3_tpl#0070">y</a>*<a href="Vec3_tpl#0070">y</a>+<a href="Vec3_tpl#0071">z</a>*<a href="Vec3_tpl#0071">z</a> ); <a href="Vec3_tpl#006F">x</a>*=fInvLen; <a href="Vec3_tpl#0070">y</a>*=fInvLen; <a href="Vec3_tpl#0071">z</a>*=fInvLen; } <strong><span style="color: #871F78">void</span></strong> NormalizeFast() { assert(<strong><span style="color: #871F78">this</span></strong>->IsValid()); F fInvLen = isqrt_fast_tpl( <a href="Vec3_tpl#006F">x</a>*<a href="Vec3_tpl#006F">x</a>+<a href="Vec3_tpl#0070">y</a>*<a href="Vec3_tpl#0070">y</a>+<a href="Vec3_tpl#0071">z</a>*<a href="Vec3_tpl#0071">z</a> ); <a href="Vec3_tpl#006F">x</a>*=fInvLen; <a href="Vec3_tpl#0070">y</a>*=fInvLen; <a href="Vec3_tpl#0071">z</a>*=fInvLen; } F NormalizeSafe(<strong><span style="color: #871F78">const</span></strong> <strong><span style="color: #871F78">struct</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& safe = <a href="Vec3Constants">Vec3Constants</a><F>::fVec3_Zero) { assert(<strong><span style="color: #871F78">this</span></strong>->IsValid()); F fLen2 = <a href="Vec3_tpl#006F">x</a>*<a href="Vec3_tpl#006F">x</a>+<a href="Vec3_tpl#0070">y</a>*<a href="Vec3_tpl#0070">y</a>+<a href="Vec3_tpl#0071">z</a>*<a href="Vec3_tpl#0071">z</a>; IF (<a href="VecPrecisionValues">VecPrecisionValues</a><F>::CheckGreater(fLen2), 1) { F fInvLen = isqrt_tpl(fLen2); <a href="Vec3_tpl#006F">x</a>*=fInvLen; <a href="Vec3_tpl#0070">y</a>*=fInvLen; <a href="Vec3_tpl#0071">z</a>*=fInvLen; <strong><span style="color: #871F78">return</span></strong> F(1) / fInvLen; } <strong><span style="color: #871F78">else</span></strong> { *<strong><span style="color: #871F78">this</span></strong> = safe; <strong><span style="color: #871F78">return</span></strong> F(0); } } <a href="Vec3_tpl">Vec3_tpl</a> GetNormalizedFloat() <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> GetNormalized(); } <a href="Vec3_tpl">Vec3_tpl</a> GetNormalized() <strong><span style="color: #871F78">const</span></strong> { F fInvLen = isqrt_safe_tpl( <a href="Vec3_tpl#006F">x</a>*<a href="Vec3_tpl#006F">x</a>+<a href="Vec3_tpl#0070">y</a>*<a href="Vec3_tpl#0070">y</a>+<a href="Vec3_tpl#0071">z</a>*<a href="Vec3_tpl#0071">z</a> ); <strong><span style="color: #871F78">return</span></strong> *<strong><span style="color: #871F78">this</span></strong> * fInvLen; } <a href="Vec3_tpl">Vec3_tpl</a> GetNormalizedFast() <strong><span style="color: #871F78">const</span></strong> { F fInvLen = isqrt_fast_tpl( <a href="Vec3_tpl#006F">x</a>*<a href="Vec3_tpl#006F">x</a>+<a href="Vec3_tpl#0070">y</a>*<a href="Vec3_tpl#0070">y</a>+<a href="Vec3_tpl#0071">z</a>*<a href="Vec3_tpl#0071">z</a> ); <strong><span style="color: #871F78">return</span></strong> *<strong><span style="color: #871F78">this</span></strong> * fInvLen; } <a href="Vec3_tpl">Vec3_tpl</a> GetNormalizedSafe(<strong><span style="color: #871F78">const</span></strong> <strong><span style="color: #871F78">struct</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& safe = <a href="Vec3Constants">Vec3Constants</a><F>::fVec3_OneX) <strong><span style="color: #871F78">const</span></strong> { F fLen2 = <a href="Vec3_tpl#006F">x</a>*<a href="Vec3_tpl#006F">x</a>+<a href="Vec3_tpl#0070">y</a>*<a href="Vec3_tpl#0070">y</a>+<a href="Vec3_tpl#0071">z</a>*<a href="Vec3_tpl#0071">z</a>; IF (<a href="VecPrecisionValues">VecPrecisionValues</a><F>::CheckGreater(fLen2), 1) { F fInvLen = isqrt_tpl(fLen2); <strong><span style="color: #871F78">return</span></strong> *<strong><span style="color: #871F78">this</span></strong> * fInvLen; } <strong><span style="color: #871F78">else</span></strong> { <strong><span style="color: #871F78">return</span></strong> safe; } } <a href="Vec3_tpl">Vec3_tpl</a> GetNormalizedSafeFloat(<strong><span style="color: #871F78">const</span></strong> <strong><span style="color: #871F78">struct</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& safe = <a href="Vec3Constants">Vec3Constants</a><F>::fVec3_OneX) <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> GetNormalizedSafe(safe); } <a href="Vec3_tpl">Vec3_tpl</a> GetPermutated(<strong><span style="color: #871F78">int</span></strong> new_z) <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> <a href="Vec3_tpl">Vec3_tpl</a>(*(&<a href="Vec3_tpl#006F">x</a>+<a href="Math_Definitions#000C">inc_mod3</a>[new_z]), *(&<a href="Vec3_tpl#006F">x</a>+dec_mod3[new_z]), *(&<a href="Vec3_tpl#006F">x</a>+new_z)); } F GetVolume() <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> <a href="Vec3_tpl#006F">x</a>*<a href="Vec3_tpl#0070">y</a>*<a href="Vec3_tpl#0071">z</a>; } <a href="Vec3_tpl">Vec3_tpl</a><F> abs() <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> <a href="Vec3_tpl">Vec3_tpl</a>(fabs_tpl(<a href="Vec3_tpl#006F">x</a>),fabs_tpl(<a href="Vec3_tpl#0070">y</a>),fabs_tpl(<a href="Vec3_tpl#0071">z</a>)); } <strong><span style="color: #871F78">void</span></strong> CheckMin(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> other) { <a href="Vec3_tpl#006F">x</a> = min(other.<a href="Vec3_tpl#006F">x</a>,<a href="Vec3_tpl#006F">x</a>); <a href="Vec3_tpl#0070">y</a> = min(other.<a href="Vec3_tpl#0070">y</a>,<a href="Vec3_tpl#0070">y</a>); <a href="Vec3_tpl#0071">z</a> = min(other.<a href="Vec3_tpl#0071">z</a>,<a href="Vec3_tpl#0071">z</a>); } <strong><span style="color: #871F78">void</span></strong> CheckMax(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> other) { <a href="Vec3_tpl#006F">x</a> = max(other.<a href="Vec3_tpl#006F">x</a>,<a href="Vec3_tpl#006F">x</a>); <a href="Vec3_tpl#0070">y</a> = max(other.<a href="Vec3_tpl#0070">y</a>,<a href="Vec3_tpl#0070">y</a>); <a href="Vec3_tpl#0071">z</a> = max(other.<a href="Vec3_tpl#0071">z</a>,<a href="Vec3_tpl#0071">z</a>); } <strong><span style="color: #871F78">void</span></strong> SetOrthogonal( <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v ) { sqr(F(0.9))*(v|v)-v.<a href="Vec3_tpl#006F">x</a>*v.<a href="Vec3_tpl#006F">x</a><0 ? (<a href="Vec3_tpl#006F">x</a>=-v.<a href="Vec3_tpl#0071">z</a>,<a href="Vec3_tpl#0070">y</a>=0,<a href="Vec3_tpl#0071">z</a>=v.<a href="Vec3_tpl#006F">x</a>) : (<a href="Vec3_tpl#006F">x</a>=0,<a href="Vec3_tpl#0070">y</a>=v.<a href="Vec3_tpl#0071">z</a>,<a href="Vec3_tpl#0071">z</a>=-v.<a href="Vec3_tpl#0070">y</a>); } <a href="Vec3_tpl">Vec3_tpl</a> GetOrthogonal() <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> sqr(F(0.9))*(<a href="Vec3_tpl#006F">x</a>*<a href="Vec3_tpl#006F">x</a>+<a href="Vec3_tpl#0070">y</a>*<a href="Vec3_tpl#0070">y</a>+<a href="Vec3_tpl#0071">z</a>*<a href="Vec3_tpl#0071">z</a>)-<a href="Vec3_tpl#006F">x</a>*<a href="Vec3_tpl#006F">x</a><0 ? <a href="Vec3_tpl">Vec3_tpl</a><F>(-<a href="Vec3_tpl#0071">z</a>,0,<a href="Vec3_tpl#006F">x</a>) : <a href="Vec3_tpl">Vec3_tpl</a><F>(0,<a href="Vec3_tpl#0071">z</a>,-<a href="Vec3_tpl#0070">y</a>); } <strong><span style="color: #871F78">void</span></strong> SetProjection( <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a>& i, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a>& n ) { *<strong><span style="color: #871F78">this</span></strong> = i-n*(n|i); } <strong><span style="color: #871F78">static</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> CreateProjection( <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a>& i, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a>& n ) { <strong><span style="color: #871F78">return</span></strong> i-n*(n|i); } <strong><span style="color: #871F78">void</span></strong> SetReflection( <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& i, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& n) { *<strong><span style="color: #871F78">this</span></strong>=(n*(i|n)*2)-i; } <strong><span style="color: #871F78">static</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> CreateReflection( <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& i, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& n ) { <strong><span style="color: #871F78">return</span></strong> (n*(i|n)*2)-i; } <strong><span style="color: #871F78">void</span></strong> SetLerp( <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& p, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& q, F t ) { <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> diff = q-p; *<strong><span style="color: #871F78">this</span></strong> = p + (diff*t); } <strong><span style="color: #871F78">static</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> CreateLerp( <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& p, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& q, F t ) { <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> diff = q-p; <strong><span style="color: #871F78">return</span></strong> p+(diff*t); } <strong><span style="color: #871F78">void</span></strong> SetSlerp( <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& p, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& q, F t ) { assert(p.IsUnit(0.005f)); assert(q.IsUnit(0.005f)); F cosine = clamp_tpl((p|q), F(-1), F(1)); <strong><span style="color: #871F78">if</span></strong>(cosine>=(F)0.99) { SetLerp(p,q,t); Normalize(); } <strong><span style="color: #871F78">else</span></strong> { F rad = acos_tpl(cosine); F scale_0 = sin_tpl((1-t)*rad); F scale_1 = sin_tpl(t*rad); *<strong><span style="color: #871F78">this</span></strong>=(p*scale_0 + q*scale_1) / sin_tpl(rad); Normalize(); } } <strong><span style="color: #871F78">static</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> CreateSlerp( <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& p, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& q, F t ) { <a href="Vec3_tpl">Vec3_tpl</a><F> v; v.SetSlerp(p,q,t); <strong><span style="color: #871F78">return</span></strong> v; } <strong><span style="color: #871F78">void</span></strong> SetQuadraticCurve(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v0, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v1, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v2, F t1) { F t0=1.0f-t1; *<strong><span style="color: #871F78">this</span></strong> = t0*t0*v0 + t0*t1*2.0f*v1 + t1*t1*v2; } <strong><span style="color: #871F78">static</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> CreateQuadraticCurve(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v0, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v1, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v2, F t) { <a href="Vec3_tpl">Vec3_tpl</a><F> ip; ip.SetQuadraticCurve(v0,v1,v2,t); <strong><span style="color: #871F78">return</span></strong> ip; } <strong><span style="color: #871F78">void</span></strong> SetCubicCurve(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v0, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v1, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v2, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v3, F t1) { F t0=1.0f-t1; *<strong><span style="color: #871F78">this</span></strong>=t0*t0*t0*v0 + 3*t0*t0*t1*v1 + 3*t0*t1*t1*v2 + t1*t1*t1*v3; } <strong><span style="color: #871F78">static</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> CreateCubicCurve(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v0, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v1, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v2, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v3, F t) { <a href="Vec3_tpl">Vec3_tpl</a><F> ip; ip.SetCubicCurve(v0,v1,v2,v3,t); <strong><span style="color: #871F78">return</span></strong> ip; } <strong><span style="color: #871F78">void</span></strong> SetQuadraticSpline(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v0, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v1, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v2, F t) { SetQuadraticCurve(v0,v1-(v0*0.5f+v1+v2*0.5f-v1*2.0f),v2,t); } <strong><span style="color: #871F78">static</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> CreateQuadraticSpline(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v0, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v1, <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& v2, F t) { <a href="Vec3_tpl">Vec3_tpl</a><F> ip; ip.SetQuadraticSpline(v0,v1,v2,t); <strong><span style="color: #871F78">return</span></strong> ip; } <strong><span style="color: #871F78">void</span></strong> SetRandomDirection( <strong><span style="color: #871F78">void</span></strong> ) { <strong><span style="color: #871F78">int</span></strong> nMax = 5; F Length2; <strong><span style="color: #871F78">do</span></strong> { <a href="Vec3_tpl#006F">x</a> = 1.0f - 2.0f*<a href="Math_Definitions#0005">cry_frand</a>(); <a href="Vec3_tpl#0070">y</a> = 1.0f - 2.0f*<a href="Math_Definitions#0005">cry_frand</a>(); <a href="Vec3_tpl#0071">z</a> = 1.0f - 2.0f*<a href="Math_Definitions#0005">cry_frand</a>(); Length2 = len2(); nMax--; } <strong><span style="color: #871F78">while</span></strong>((Length2>1.0f || Length2<0.0001f) && nMax > 0); F InvScale = isqrt_tpl(Length2); <a href="Vec3_tpl#006F">x</a> *= InvScale; <a href="Vec3_tpl#0070">y</a> *= InvScale; <a href="Vec3_tpl#0071">z</a> *= InvScale; } <a href="Vec3_tpl">Vec3_tpl</a><F> GetRotated(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& axis, F angle) <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> GetRotated(axis,cos_tpl(angle),sin_tpl(angle)); } <a href="Vec3_tpl">Vec3_tpl</a><F> GetRotated(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& axis, F cosa,F sina) <strong><span style="color: #871F78">const</span></strong> { <a href="Vec3_tpl">Vec3_tpl</a><F> zax = axis*(*<strong><span style="color: #871F78">this</span></strong>|axis); <a href="Vec3_tpl">Vec3_tpl</a><F> xax = *<strong><span style="color: #871F78">this</span></strong>-zax; <a href="Vec3_tpl">Vec3_tpl</a><F> yax = axis%xax; <strong><span style="color: #871F78">return</span></strong> xax*cosa + yax*sina + zax; } <a href="Vec3_tpl">Vec3_tpl</a><F> GetRotated(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a>& center,<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& axis, F angle) <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> center+(*<strong><span style="color: #871F78">this</span></strong>-center).GetRotated(axis,angle); } <a href="Vec3_tpl">Vec3_tpl</a><F> GetRotated(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& center,<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>& axis, F cosa,F sina) <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> center+(*<strong><span style="color: #871F78">this</span></strong>-center).GetRotated(axis,cosa,sina); } <a href="Vec3_tpl">Vec3_tpl</a> CompMul( <strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> rhs ) <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong>( <a href="Vec3_tpl">Vec3_tpl</a>( <a href="Vec3_tpl#006F">x</a> * rhs.<a href="Vec3_tpl#006F">x</a>, <a href="Vec3_tpl#0070">y</a> * rhs.<a href="Vec3_tpl#0070">y</a>, <a href="Vec3_tpl#0071">z</a> * rhs.<a href="Vec3_tpl#0071">z</a> ) ); } F Dot (<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> v) <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> <a href="Vec3_tpl#006F">x</a>*v.<a href="Vec3_tpl#006F">x</a> + <a href="Vec3_tpl#0070">y</a>*v.<a href="Vec3_tpl#0070">y</a> + <a href="Vec3_tpl#0071">z</a>*v.<a href="Vec3_tpl#0071">z</a>; } <a href="Vec3_tpl">Vec3_tpl</a><F> Cross (<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F> vec2) <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>( <a href="Vec3_tpl#0070">y</a>*vec2.<a href="Vec3_tpl#0071">z</a> - <a href="Vec3_tpl#0071">z</a>*vec2.<a href="Vec3_tpl#0070">y</a>, <a href="Vec3_tpl#0071">z</a>*vec2.<a href="Vec3_tpl#006F">x</a> - <a href="Vec3_tpl#006F">x</a>*vec2.<a href="Vec3_tpl#0071">z</a>, <a href="Vec3_tpl#006F">x</a>*vec2.<a href="Vec3_tpl#0070">y</a> - <a href="Vec3_tpl#0070">y</a>*vec2.<a href="Vec3_tpl#006F">x</a>); } DEPRICATED <strong><span style="color: #871F78">operator</span></strong> F* () { <strong><span style="color: #871F78">return</span></strong> (F*)<strong><span style="color: #871F78">this</span></strong>; } <strong><span style="color: #871F78">template</span></strong> <<strong><span style="color: #871F78">class</span></strong> T> <strong><span style="color: #871F78">explicit</span></strong> DEPRICATED <a href="Vec3_tpl">Vec3_tpl</a>(<strong><span style="color: #871F78">const</span></strong> T *src) { <a href="Vec3_tpl#006F">x</a>=src[0]; <a href="Vec3_tpl#0070">y</a>=src[1]; <a href="Vec3_tpl#0071">z</a>=src[2]; } <a href="Vec3_tpl">Vec3_tpl</a>& zero() { <a href="Vec3_tpl#006F">x</a>=<a href="Vec3_tpl#0070">y</a>=<a href="Vec3_tpl#0071">z</a>=0; <strong><span style="color: #871F78">return</span></strong> *<strong><span style="color: #871F78">this</span></strong>; } F len() <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> sqrt_tpl(<a href="Vec3_tpl#006F">x</a>*<a href="Vec3_tpl#006F">x</a>+<a href="Vec3_tpl#0070">y</a>*<a href="Vec3_tpl#0070">y</a>+<a href="Vec3_tpl#0071">z</a>*<a href="Vec3_tpl#0071">z</a>); } F len2() <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> <a href="Vec3_tpl#006F">x</a>*<a href="Vec3_tpl#006F">x</a> +<a href="Vec3_tpl#0070">y</a>*<a href="Vec3_tpl#0070">y</a> + <a href="Vec3_tpl#0071">z</a>*<a href="Vec3_tpl#0071">z</a>; } <a href="Vec3_tpl">Vec3_tpl</a>& normalize() { F len2 = <a href="Vec3_tpl#006F">x</a>*<a href="Vec3_tpl#006F">x</a>+<a href="Vec3_tpl#0070">y</a>*<a href="Vec3_tpl#0070">y</a>+<a href="Vec3_tpl#0071">z</a>*<a href="Vec3_tpl#0071">z</a>; <strong><span style="color: #871F78">if</span></strong> (len2>(F)1e-20f) { F rlen = isqrt_tpl(len2); <a href="Vec3_tpl#006F">x</a>*=rlen; <a href="Vec3_tpl#0070">y</a>*=rlen; <a href="Vec3_tpl#0071">z</a>*=rlen; } <strong><span style="color: #871F78">else</span></strong> <a href="Vec3_tpl#0056">Set</a>(0,0,1); <strong><span style="color: #871F78">return</span></strong> *<strong><span style="color: #871F78">this</span></strong>; } <a href="Vec3_tpl">Vec3_tpl</a> normalized() <strong><span style="color: #871F78">const</span></strong> { F len2 = <a href="Vec3_tpl#006F">x</a>*<a href="Vec3_tpl#006F">x</a>+<a href="Vec3_tpl#0070">y</a>*<a href="Vec3_tpl#0070">y</a>+<a href="Vec3_tpl#0071">z</a>*<a href="Vec3_tpl#0071">z</a>; <strong><span style="color: #871F78">if</span></strong> (len2>(F)1e-20f) { F rlen = isqrt_tpl(len2); <strong><span style="color: #871F78">return</span></strong> <a href="Vec3_tpl">Vec3_tpl</a>(<a href="Vec3_tpl#006F">x</a>*rlen,<a href="Vec3_tpl#0070">y</a>*rlen,<a href="Vec3_tpl#0071">z</a>*rlen); } <strong><span style="color: #871F78">else</span></strong> <strong><span style="color: #871F78">return</span></strong> <a href="Vec3_tpl">Vec3_tpl</a>(0,0,1); } <strong><span style="color: #871F78">template</span></strong><<strong><span style="color: #871F78">class</span></strong> F1> <a href="Vec3_tpl">Vec3_tpl</a><F1> sub(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F1>& v) <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F1>(<a href="Vec3_tpl#006F">x</a>-v.<a href="Vec3_tpl#006F">x</a>, <a href="Vec3_tpl#0070">y</a>-v.<a href="Vec3_tpl#0070">y</a>, <a href="Vec3_tpl#0071">z</a>-v.<a href="Vec3_tpl#0071">z</a>); } <strong><span style="color: #871F78">template</span></strong><<strong><span style="color: #871F78">class</span></strong> F1> <a href="Vec3_tpl">Vec3_tpl</a><F1> scale(<strong><span style="color: #871F78">const</span></strong> F1 k) <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F>(<a href="Vec3_tpl#006F">x</a>*k,<a href="Vec3_tpl#0070">y</a>*k,<a href="Vec3_tpl#0071">z</a>*k); } <strong><span style="color: #871F78">template</span></strong><<strong><span style="color: #871F78">class</span></strong> F1> F1 dot(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F1>& v) <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> (F1)(<a href="Vec3_tpl#006F">x</a>*v.<a href="Vec3_tpl#006F">x</a>+<a href="Vec3_tpl#0070">y</a>*v.<a href="Vec3_tpl#0070">y</a>+<a href="Vec3_tpl#0071">z</a>*v.<a href="Vec3_tpl#0071">z</a>); } <strong><span style="color: #871F78">template</span></strong><<strong><span style="color: #871F78">class</span></strong> F1> <a href="Vec3_tpl">Vec3_tpl</a><F1> cross(<strong><span style="color: #871F78">const</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F1> &v) <strong><span style="color: #871F78">const</span></strong> { <strong><span style="color: #871F78">return</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><F1>(<a href="Vec3_tpl#0070">y</a>*v.<a href="Vec3_tpl#0071">z</a>-<a href="Vec3_tpl#0071">z</a>*v.<a href="Vec3_tpl#0070">y</a>, <a href="Vec3_tpl#0071">z</a>*v.<a href="Vec3_tpl#006F">x</a>-<a href="Vec3_tpl#006F">x</a>*v.<a href="Vec3_tpl#0071">z</a>, <a href="Vec3_tpl#006F">x</a>*v.<a href="Vec3_tpl#0070">y</a>-<a href="Vec3_tpl#0070">y</a>*v.<a href="Vec3_tpl#006F">x</a>); } AUTO_STRUCT_INFO };</pre></div></div> <div class="Element6"> <a name="0058"></a>Vec3_tpl::value_type Nested Type</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">typedef</span></strong> F <strong><span style="color: #660000">value_type</span></strong>;</pre></div></div> <div class="Element6"> <a name="0059"></a>Vec3_tpl::Vec3 Nested Type</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">typedef</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><f32> <strong><span style="color: #660000">Vec3</span></strong>;</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> always 32 bit</p></div> </div> <div class="Element6"> <a name="006C"></a>Vec3_tpl::Vec3d Nested Type</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">typedef</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><f64> <strong><span style="color: #660000">Vec3d</span></strong>;</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> always 64 bit</p></div> </div> <div class="Element6"> <a name="006D"></a>Vec3_tpl::Vec3i Nested Type</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">typedef</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><<strong><span style="color: #871F78">int</span></strong>> <strong><span style="color: #660000">Vec3i</span></strong>;</pre></div></div> <div class="Element6"> <a name="006E"></a>Vec3_tpl::Vec3r Nested Type</div> <a name="432B2B"></a><div class="Element99"> C++</div> <div class="Element101"><div class="Element100"><pre class="Element100"><strong><span style="color: #871F78">typedef</span></strong> <a href="Vec3_tpl">Vec3_tpl</a><real> <strong><span style="color: #660000">Vec3r</span></strong>;</pre></div></div> <a name="4465736372697074696F6E"></a><div class="Element14"> Description</div> <div class="Element11"> <div class="Element10"> <p class="Element10"> variable float precision. depending on the target system it can be 32, 64 or 80 bit</p></div> </div> </div> <!-- End Page Content --> <!-- Begin Page Footer --> <!-- End Page Footer --> </div> </div> <!-- End Client Area --> |
...
Overview
Content Tools