初始速度
2016-08-06 09:48
260 查看
// // vector.h // // Vector structure and its operations for 3-d space vectors. // // Written by: Yanting Wang 12/25/2002 // #include <iostream> using namespace std; #include <math.h> #ifndef __VECTOR__H #define __VECTOR__H struct Vector { double x, y, z; Vector() : x(0.0), y(0.0), z(0.0) {} Vector( double x, double y, double z ) : x(x), y(y), z(z) {} void set( double xx, double yy, double zz ) { x = xx; y = yy; z = zz; } void clear() { x = 0.0; y = 0.0; z = 0.0; } // square length of a vector double r2() const { return x*x + y*y + z*z; } // length of a vector double r() const { return sqrt( r2() ); } // the unit vector Vector normal() const { double r = sqrt( x*x + y*y + z*z ); return Vector( x/r, y/r, z/r ); } const Vector &operator = ( const Vector &v ) { x = v.x; y = v.y; z = v.z; return v; } const Vector &operator += ( const Vector &v ) { x += v.x; y += v.y; z += v.z; return *this; } const Vector &operator -= ( const Vector &v ) { x -= v.x; y -= v.y; z -= v.z; return *this; } const Vector &operator *= ( double d ) { x *= d; y *= d; z *= d; return *this; } const Vector &operator /= ( double d ) { x /= d; y /= d; z /= d; return *this; } }; Vector operator+( const Vector &v1, const Vector &v2 ) { return Vector( v1.x + v2.x, v1.y + v2.y, v1.z + v2.z ); } Vector operator-( const Vector &v1, const Vector &v2 ) { return Vector( v1.x - v2.x, v1.y - v2.y, v1.z - v2.z ); } Vector operator-( const Vector &v1 ) { return Vector( -v1.x, -v1.y, -v1.z ); } Vector operator*( const Vector &v, const double d ) { return Vector( v.x*d, v.y*d, v.z*d ); } Vector operator*( const double d, const Vector &v ) { return Vector( v.x*d, v.y*d, v.z*d ); } //scalar product double operator*( const Vector &v1, const Vector &v2 ) { return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z; } //vector product Vector operator^( const Vector &v1, const Vector &v2 ) { return Vector( v1.y*v2.z - v1.z*v2.y, v1.z*v2.x - v1.x*v2.z, v1.x*v2.y - v1.y*v2.x ); } Vector operator/( const Vector &v, const double d ) { return Vector( v.x/d, v.y/d, v.z/d ); } ostream &operator<<( ostream &output, const Vector &p ) { output << p.x << " " << p.y << " " << p.z; return output; } istream &operator>>( istream &input, Vector &p ) { input >> p.x >> p.y >> p.z; return input; } #endif //__VECTOR__H
相关文章推荐
- Java中的String与正则表达式浅述
- if示例_shell脚本
- 转载:程序员必看的十大电影
- Tomcat部署web项目,如何直接通过域名访问,不加项目名称
- 有点激动,WPF换肤搞定了!
- (复习)图论--最短路--Floyd算法
- MVC思想和三层架构
- 洛谷 P2258 NOIP2014普及组 T4 子矩阵 DFS+DP
- 浅谈DOS与DDOS攻击的原理
- js script加载
- Python-远程管理-Paramiko实现ssh&sftp
- while示例_shell脚本
- mongo shell 高级之 高可用集群
- 前序和中序重建二叉树
- mongo shell 高级之 分片
- Android开发之自定义侧滑ListView
- Swift截取HTML中的所有图片url
- mongo shell 高级之 副本集
- 校外实习报告(十六)
- 欢迎使用CSDN-markdown编辑器