网站怎样上传到空间,重庆有多少网站,华大集团 北京网站建设,专业个人网站建设一#xff1a;点乘介绍 1. 向量点乘#xff1a; 2. 向量点乘的性质#xff1a; 3. 向量点乘公式#xff1a; 4. 向量的点乘的属性#xff1a; #xff08;1#xff09;#xff1a;向量与自身做点乘#xff0c;会得到向量长度的平方#xff1a; #xff08;2#xf…一点乘介绍 1. 向量点乘 2. 向量点乘的性质 3. 向量点乘公式 4. 向量的点乘的属性 1向量与自身做点乘会得到向量长度的平方 2向量长度为向量与自身点乘后再求平方根 3向量投影将a向量投影到向量b上 4向量夹角 二叉乘介绍 1. 向量叉乘 2. 向量叉乘公式 3. 向量叉乘的属性 判断三个向量是否共面
三应用1 - 求两直线的交点 12D直线方程 2将直线1带入直线2中 叉乘等于0意味着两向量共线。 3求交点 四应用2 - 求三个平面的交点 1三个平面方程 2三个平面方程三个未知数利用克拉默法则求解即可。
三实现
#ifndef _POINT_H_
#define _POINT_H_#include iostream
#include cmathclass Point2D
{
public:float x, y;Point2D() {}Point2D(float x, float y) : x(x), y(y) {}Point2D operator(const Point2D t){x t.x;y t.y;return *this;}Point2D operator-(const Point2D t){x - t.x;y - t.y;return *this;}Point2D operator*(float t){x * t;y * t;return *this;}Point2D operator/(float t){x / t;y / t;return *this;}Point2D operator(const Point2D t) const{return Point2D(*this) t;}Point2D operator-(const Point2D t) const{return Point2D(*this) - t;}Point2D operator*(float t) const{return Point2D(*this) * t;}Point2D operator/(float t) const{return Point2D(*this) / t;}float dot(const Point2D b) const{return x * b.x y * b.y;}friend std::ostream operator(std::ostream out, const Point2D t){out ( t.x , t.y );return out;}};Point2D operator*(float a, const Point2D b)
{return b * a;
}float dot(const Point2D a, const Point2D b)
{return a.dot(b);
}float norm(const Point2D a)
{return dot(a, a);
}double abs(const Point2D a) {return sqrt(norm(a));
}double proj(const Point2D a, const Point2D b)
{return dot(a, b) / abs(b);
}double angle(const Point2D a, const Point2D b)
{return acos(dot(a, b) / abs(a) / abs(b));
}float cross(const Point2D a, const Point2D b)
{return a.x * b.y - a.y * b.x;
}Point2D intersect(const Point2D a1, const Point2D d1, const Point2D a2, const Point2D d2)
{return a1 cross(a2 - a1, d2) / cross(d1, d2) * d1;
}class Point3D: public Point2D
{
public:float z;Point3D() {}Point3D(float x, float y, float z) : Point2D(x, y), z(z) {}Point3D operator(const Point3D t){x t.x;y t.y;z t.z;return *this;}Point3D operator-(const Point3D t){x - t.x;y - t.y;z - t.z;return *this;}Point3D operator*(float t){x * t;y * t;z * t;return *this;}Point3D operator/(float t){x / t;y / t;z / t;return *this;}Point3D operator(const Point3D t) const{return Point3D(*this) t;}Point3D operator-(const Point3D t) const{return Point3D(*this) - t;}Point3D operator*(float t) const{return Point3D(*this) * t;}Point3D operator/(float t) const{return Point3D(*this) / t;}float dot(const Point3D t) const{return x * t.x y * t.y z * t.z;}friend std::ostream operator(std::ostream out, const Point3D t){out ( t.x , t.y , t.z );return out;}
};Point3D operator*(float a, Point3D b)
{return b * a;
}float dot(const Point3D a, const Point3D b)
{return a.dot(b);
}float norm(const Point3D a)
{return dot(a, a);
}double abs(const Point3D a) {return sqrt(norm(a));
}double proj(const Point3D a, const Point3D b)
{return dot(a, b) / abs(b);
}double angle(const Point3D a, const Point3D b)
{return acos(dot(a, b) / abs(a) / abs(b));
}Point3D cross(const Point3D a, const Point3D b)
{return Point3D(a.y * b.z - a.z * b.y,a.z * b.x - a.x * b.z,a.x * b.y - a.y * b.x);
}float triple(const Point3D a, const Point3D b, const Point3D c)
{return dot(a, cross(b, c));
}Point3D intersect(const Point3D a1, const Point3D n1, const Point3D a2, const Point3D n2, const Point3D a3, const Point3D n3)
{Point3D x(n1.x, n2.x, n3.x);Point3D y(n1.y, n2.y, n3.y);Point3D z(n1.z, n2.z, n3.z);Point3D d(dot(a1, n1), dot(a2, n2), dot(a3, n3));return Point3D(triple(d, y, z),triple(x, d, z),triple(x, y, d)) / triple(n1, n2, n3);
}#endif