首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

请问一个平面几何和图形方面的算法有关问题

2012-04-04 
请教一个平面几何和图形方面的算法问题有两个点的坐标, 将其中的一个点作为圆心,另一个点按照圆心旋转某个

请教一个平面几何和图形方面的算法问题
有两个点的坐标, 将其中的一个点作为圆心,另一个点按照圆心旋转某个角度X,如何得到旋转之后的这个点的新坐标?

[解决办法]
有两个点的坐标,你就有两个点的距离
旋转某个角度X,你有一个与X轴或者Y轴的夹角

这样就有了一斜边一角
用三角函数求两直角边吧
[解决办法]
假设两个点的坐标分别为A(x1,y1),B(x2,y2),求C(x3,y3)

首先根据A与B的距离和A与C的距离相等,列一个方程
(x1-x2)^2+(y1-y2)^2=(x1-x3)^2+(y1-y3)^2
再根据角度列一个方程,转过的弧度是X
(y1-y2)/(x1-x2) + X = (y1-y3)/(x1-x3)

这样的一个二元方程组应该可以解了吧。
[解决办法]
先把圆心那点移动到 原点上,另一点也要相应的进行移动,然后再通过三角函数把另一点的新坐标算出来,然后移动新的点的坐标,
[解决办法]
利用 2D 的仿射变换类 AffineTransform 可以很方便地计算

Java code
import java.awt.Shape;import java.awt.geom.AffineTransform;import java.awt.geom.Line2D;public class Test6 {        public static void main(String[] args) {        // 点 (2, 3),使用 Line 来冒充一下         Line2D.Double line = new Line2D.Double(2, 3, 2, 3);        // 围绕 (1, 2) 逆时针旋转 60 度        AffineTransform affine = AffineTransform.getRotateInstance(Math.toRadians(60), 1, 2);        Shape n = affine.createTransformedShape(line);        // 旋转结果        System.out.println("x = " + n.getBounds2D().getX());        System.out.println("y = " + n.getBounds2D().getY());    }}
[解决办法]
上面这个仿射变化的数学公式为:



图中 a, b 表示参照点的坐标,x, y 是起点坐标,x', y' 是变换后的坐标。
[解决办法]
高中学的极坐标都不记得了吗?
x=rCos@
y=rSin@
把A点的坐标平移至原点,然后换成极坐标,B点极坐标 @+d@ 以后,再转成直角坐标,再移回原来位置,就可以了撒。
[解决办法]
下面是C++代码例子

C/C++ code
/*  旋转点操作  @param center            旋转中心  @param point            操作点  @param angle            旋转角度   @return FPoint    返回旋转后的点 */FPoint CShape::RotatePoint(FPoint center, FPoint point, double angle){  FPoint Circumpt;  Circumpt.x = cos(angle) * (point.x - center.x) + sin(angle) * (center.y - point.y) + center.x;  Circumpt.y = center.y - sin(angle) * (center.x-point.x) - cos(angle) * (center.y - point.y);    return Circumpt;} 

热点排行