对称问题就是计算几何中的经典问题,熟练掌握以及应用对称可以使得问题简化,时间复杂度也可能相对减少。
平移和旋转时解析几何中常用的坐标变换方法。坐标变换可能出现在问题中,也可能出现在解题的过程中。
解题时,通过巧妙的平移旋转,可以简化计算,使题目变得更加直观,方便解题。
例如,对于对称图形,只需要计算研究一半的性质,而另一半可利用对称的性质直接得出。
点的对称
点的对称是几何中的基础问题。
在二维平面上,关于原点对称有一种简单的情况,已知点A(x1,y1),B(x2,y2),&&A,B关于原点对称,那么很容易得出:x2=-x1,y2=-y1;
若点A,B关于点C对称,已知A,B,求点C的坐标。那么(x1+x2)/2=xc,(y1+y2)/2=yc;
Code:
Point SymmetricCoordinates(Point p1,Point p2){
Point p3;
p3.x=2.0*p2.x-p1.x;
p3.y=2.0*p2.y-p1.y;
return p3;
}
点关于直线的对称
求点关于直线的对称点,相当于求点关于直线上特定一点的对称点,即关于垂足的对称点。
首先讨论一种特例:点A(x1,y1)关于坐标轴的对称点。
易得:关于x轴的对称点为A'(x1,-y1);关于y轴的对称点为A''(-x1,y1);
当直线平行于坐标轴时:直线l1:y=a,l2:x=b;
易得:关于l1对称的点为A'(x1,2a-y1);
现在讨论一般的直线l:ax+by+c=0;设A'(x,y),
那么易得:点在直线l上。且过A和B的直线与l垂直,即乘积-1。
可得计算公式: 和
那么A'坐标即为:
平移
坐标的平移使解析几何中的基础问题,把点A(x,y)沿向量a=(c1,c2)平移只需把点A的横坐标分别加上向量a的坐标即可。
边的平移可以看作点的平移,两个点向相同方向平移一段距离:
Code:
int Move(double mid){//默认向左平移mid距离
for(int i=1;i<=n;++i){
Edge2[i].start=Point(Edge[i].start.x+cos(Edge[i].ang+PI/2.0)*mid,Edge[i].start.y+sin(Edge[i].ang+PI/2.0)*mid);
Edge2[i].end=Point(Edge[i].end.x+cos(Edge[i].ang+PI/2.0)*mid,Edge[i].end.y+sin(Edge[i].ang+PI/2.0)*mid);
}
}
点延向量平移同时可以看作是坐标系延相反的方向平移,这样就可以得到简单图形的坐标平移,即左加右减。
旋转
旋转在几何和线性代数中是描述刚体围绕一个固定点的运动在平面||空间中的变换。
旋转不同于没有固定点的平移和翻转变换。旋转保留任意两点之间的距离在变幻前后不变。
首先给出点坐标的旋转公式:
其中,x,y表示物体相对旋转点旋转到角度之前的坐标;x1,y1表示物体旋转
角后相对于旋转点的坐标。
具有下面几条关系:设A(x,y)绕B(a,b)旋转度后的位置为C(c,d)。
1.设A点旋转前的角度为,则旋转(逆时针)到C点后角度为
+
。
2.求A,B两点的距离:
3.求C,B两点的距离:
4.显然dist1=dist2,设dist1=r,所以:
5.有三角函数两角和公式得:
由此得出:
即旋转后的坐标c,d只与旋转前的坐标x,y和旋转角度有关。如图:
.