作者:henu_wxj
链接:https://blog.nowcoder.net/n/803d062c35624a67a0917ed7dd44fa1d
来源:牛客网
对称问题就是计算几何中的经典问题,熟练掌握以及应用对称可以使得问题简化,时间复杂度也可能相对减少。
平移和旋转时解析几何中常用的坐标变换方法。坐标变换可能出现在问题中,也可能出现在解题的过程中。
解题时,通过巧妙的平移旋转,可以简化计算,使题目变得更加直观,方便解题。
例如,对于对称图形,只需要计算研究一半的性质,而另一半可利用对称的性质直接得出。
点的对称
点的对称是几何中的基础问题。
在二维平面上,关于原点对称有一种简单的情况,已知点
若点A,B关于点C对称,已知A,B,求点C的坐标。那么
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;
}
点关于直线的对称
求点关于直线的对称点,相当于求点关于直线上特定一点的对称点,即关于垂足的对称点。
首先讨论一种特例:点
易得:关于x轴的对称点为
当直线平行于坐标轴时:直线l1:y=a,l2:x=b;
易得:关于l1对称的点为
现在讨论一般的直线l:ax+by+c=0;设A'(x,y),
那么易得:点
在直线l上。且过A和B的直线与l垂直,即乘积-1。
可得计算公式:
和
那么A'坐标即为:
平移
坐标的平移使解析几何中的基础问题,把点A(x,y)沿向量
边的平移可以看作点的平移,两个点向相同方向平移一段距离:
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表示物体相对旋转点旋转到
具有下面几条关系:设A(x,y)绕B(a,b)旋转
1.设A点旋转前的角度为
2.求A,B两点的距离:
3.求C,B两点的距离:
4.显然dist1=dist2,设dist1=r,所以:
5.有三角函数两角和公式得:
由此得出:
即旋转后的坐标c,d只与旋转前的坐标x,y和旋转角度
.
查看作者更多博客:https://blog.nowcoder.net/remil