点与向量
点 (point) 表示空间中的位置,它有空间中的坐标,例如在三维空间中,点有 (x, y, z) 坐标。
向量 (vector) 是有方向的量,它可以表示在空间中的移动。向量可以通过两个点的差计算,它连接起始点和终止点。
结构体:
class Point{
double x;
double y;
}
向量(Vector)也可以使用点的结构体来使用。
线段与直线
线段 (line segment) 是由两个端点组成的有向的有限长度的直线。
直线 (line) 是由无限多个点组成的无限长的线。
与线段不同,直线没有端点,它一直延伸到无穷远。
结构体:
class Segment{
Point p1;
Point p2;
}
同时直线和线段可以使用相同的方法实现。
圆
圆 (circle) 是一种二维图形,由一个中心点和一个固定半径组成。所有离中心点距离相等的点在同一个圆上。圆的定义可以通过一个方程来表示,例如 (x-a)^2 + (y-b)^2 = r^2,其中 (a,b) 是圆心,r 是半径。
表示圆的类:
class Circle{
Point c;
double r;
}
此外多边形可以使用点的序列来表示,通常使用Point数组或List来表示。
向量的基本运算
简单实现:
class Point{
double x;
double y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
//加
private Point add(Point p){
return new Point(x+p.x,y+p.y);
}
//减
private Point sub(Point p){
return new Point(x-p.x,y-p.y);
}
//乘
private Point mul(double k){
return new Point(x*k,y*k);
}
}
向量大小
向量大小,也称为向量的模,是一维向量的长度,它反映了向量在空间中的长度。向量的模可以通过欧几里得公式来计算。
double abs (Point a){
return Math.sqrt(a.x*a.x+a.y*a.y);
}
向量内积
向量内积(也称为点积)是两个向量的数学表达式,用于评估向量的相似性。它可以计算为两个向量的对应元素的乘积的和。结果是一个标量,可以用来评估向量的相关性、方向和长度。
double dot(Point a,Point b){
return a.x*b.x+a.y*b.y;
}
向量外积
向量外积(也称为叉积)是两个向量的数学表达式,用于描述向量在三维空间中的相对位置。它返回一个向量,该向量的方向垂直于原始两个向量,长度为两个向量所围成平行四边形的面积。
double cross(Point a,Point b){
return a.x*b.y-a.y*b.x;
}