已知坐标系内有四点A(X1,Y1)、B(X2,Y2)、C(X3,Y3)、D(X4,Y4)
且每三个点不在一条直线上
经过旋转、缩放等系列变换后
已知其中三点坐标A(Xa,Ya)、B(Xb,Yb)、C(Xc,Yc)
求点D(Xd,Yd)的坐标?

解决方案 »

  1.   

    不管你做任何的操作,你是如何计算ABC三点坐标的,你就如何计算D点坐标,否则,不计算D点,又没有四点间的数据规则,d点坐标从何而来
      

  2.   

    楼上的两位,没这么难吧?原先的四点坐标已经知道了,为:A(X1,Y1)、B(X2,Y2)、C(X3,Y3)、D(X4,Y4),现在也已知道其中3个点的坐标A(Xa,Ya)、B(Xb,Yb)、C(Xc,Yc),也就是说只要获得第四点的坐标d(Xd,Yd)就可以了。不管图形是旋转还是缩放,任意两点间的距离比例是不会改变的,由此我们可以用方程式来求解,而只需求出最后一点的坐标x和y,因此,求解两个未知数,只需要两个方程式就可以了。思路如下:(不知道怎么输入表达式,所以有些地方用中文表示)原D点和A点之间的距离为:( (X4-X1)平方+(Y4-Y1)平方 )整个值开根号;
    现在D点和A点之间的距离为:( (Xd-Xa)平方+(Yd-Ya)平方 )整个值开根号;
    由此得出缩放的比例为以上两者相除。
    以此类推,求出D点和B点之间的前后距离的比例,这个比例和上面求出的比例应该是一致的,因为两个比例值相等,可以得出方程组中的一个方程式;再重复前两个步骤,加入C点的坐标代替A或者B重新计算,得出另外一个方程式,如此,方程组完成,即可求出D点现在坐标值其中图形旋转对距离的计算没有影响,因此不加考虑
      

  3.   

    你的思想是好的,但是实际情况未必是这样,既然经过各种变换,能够直到ABC的坐标,怎么就不能知道D的坐标呢,不管怎样计算出来,这四个点的必定有坐标规则约束,两点间距离也是一种约束,总之必定要清楚四点的关系或许楼主由他特定的要求,就是不明白,为什么ABC都能得到,便便D得不到呢
      

  4.   

    而且还有一个问题,楼主没有说清楚,就是旋转缩放是如何进行的,如果是对整个ABCD四个点进行的,那还好,xinxinshou2009 ,你的方法是可行的,如果是对其中某几个点进行变形,旋转等,那就乱了
      

  5.   

    感谢楼上几位的参数
    我对问题再补充一下:
    1、首先四个点肯定是同时缩放旋转的
    2、第四个点要根据另外3个点的变换规则来确定位置,假设以A点为原点坐标,根据B点和C点相对A点的变化情况找出规则,来得到D点的坐标的变化情况。
    3、应该像xinxinshou2009 这样的一个方程组,但他的这个我还没有验证
    4、不知道在矩阵计算方面有无相关的现成的解法大家继续努力帮我解决啊
      

  6.   

    to xinxinshou2009:
      我不是没有验证你的方法,而是在回复帖子的时候还没来得及验证我的同事已经试验了你的方法,你的适合于等比缩放
      

  7.   

    线性代数问题。
    三点不共线,以A点为圆点,以AB为X轴,B为(1,0),AC为Y轴,C为(0,1),可以鼓捣出一个坐标系,
    求出在此坐标系内D点坐标
    以变幻后A点为圆点,以AB为X轴,B为(1,0),AC为Y轴,C为(0,1),可以鼓捣出一个坐标系,
    d点在同一点,在变换回去,得到(xd,yd)
      

  8.   

    to 梁海鹰你说的那个座标系,怎么X,Y轴不是直角的,可以这样吗,请指教
      

  9.   

    经过验证xinxinshou2009的方法理论上可用,但实际应用不行。计算量太大。
    他的方法matlab代码如下syms x1 x2 x3 y1 y2 y3 xa xb ya yb xc yc;
    [xc,yc]=solve('((x2-x1)^2+(y2-y1)^2)^(1/2)/((xb-xa)^2+(yb-ya)^2)^(1/2)=((x3-x1)^2+(y3-y1)^2)^(1/2)/((xc-xa)^2+(yc-ya)^2)^(1/2)','((x2-x1)^2+(y2-y1)^2)^(1/2)/((xb-xa)^2+(yb-ya)^2)^(1/2) = ((x3-x2)^2+(y3-y2)^2)^(1/2)/((xc-xb)^2+(yc-yb)^2)^(1/2)','xc,yc')
    x1=0; 
    x2=1;
    x3=0;
    y1=0;
    y2=0;
    y3=-1;
    xa=0;
    ya=0;
    xb=3;
    yb=0;
    xc=subs(xc); 
    yc=subs(yc);
      

  10.   

    不知道你说的实际应用不行是指什么意思?就是指计算量大?你觉得计算量大,而实质上电脑算起来很快的,几乎感觉不到时间。我曾经用tchart画过一幅柱状图,有3000多条柱线,每个柱线有个数据要用前后100条的数据根据一定的规则计算出来,这么大量的计算,也只是在一点按钮后马上就出结果了,根本没感觉到有计算的延迟。另外,由于你的要求要进行旋转和缩放,你就得先分析旋转和缩放对图形有什么样的影响。根据我提出的理论,旋转是不影响各点之间的距离的,只有缩放会影响,所以再加进去缩放的比例,就可以得出第四点的坐标。以方程组的规律,求几个未知数就需要几个方程式,所以必然要用到已经3个点的所有坐标,至少用距离的方法来计算,仅凭两个点坐标是不够的。至于梁海鹰的方法,我都还没看明白,数学基础太差。但是简单的判断,只用两个点就要求出第四点的坐标,可能性不大,就算能实现,所进行的计算量绝对不在我的方法之下。顺便从常理推断,如果两个点的坐标就已经足够,题目本身何必提供第三点的坐标?
      

  11.   

    to xinxinshou2009:
    上面的那个方程式,计算量确实很大,因为计算一涉及平方计算量就大了。期待梁海鹰出来说明一下他的那个方法