标题:3点排序问题
只看楼主
FUNFUNHO
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-6-5
结帖率:0
 问题点数:0 回复次数:12 
3点排序问题
已知平面上3个点的坐标分别是:O(0x,Oy),P(Px,Py),Q(Qx,Qy)
目标是按横坐标由小到大的顺序排列这3个点 A<B<C
我的思路是:
If Ox<Px
    if Ox<Qx
       Ax=Ox
       Ay=Oy
        if Px<Qx
           Bx=Px
           By=Py
           Cx=Qx
           Cy=Qy
        else
           Bx=Qx
           By=Qy
           Cx=Px
           Cy=Py
      else  
           Ax=Qx
           Ay=Qy
           Bx=Ox
           By=Oy
           Cx=Px
           Cy=Py
else if Px>Qx       (从这里开始就觉得嵌套怪怪的……
      Ax=Qx
      Ay=Qy
      Bx=Px
      By=Py
      Cx=Ox
      Cy=Oy
      else if
       .............. 混乱了……
  
请大家指点一下迷津~~~~~~
         










搜索更多相关主题的帖子: 平面 
2012-06-06 14:38
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
用 DO CASE   ENDCASE 试下
FOR  ENDFOR
FOR EACH  ENDFOR
else if Px>Qx
else
   if Px>Qx            


[ 本帖最后由 sdta 于 2012-6-6 14:45 编辑 ]

坚守VFP最后的阵地
2012-06-06 14:41
FUNFUNHO
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-6-5
得分:0 
回复 2楼 sdta
嘿嘿~ 我在网上找到了有关do case endcase的用法 不过一时之间有点转不过弯来...
但是想到了另一个解决上面问题的思路~

Cx=max(Ox,Px,Qx)
if Cx==Ox       (判断两个数是否相等是用“==”吗?还是其它符号呢?)
   Cy=Oy
else
   if Cx==Px
      Cy=Py
else
    if Cx==Qx
       Cy=Qy
endif
&&这样就可以将横坐标最大的那个点与它的纵坐标匹配了~   不过想法虽是如此 但是计算机也是这样想的吗???我先去实践一下~~~

Ax=min(Ox,Px,Qx)
  找横坐标最小点的纵坐标方法同上
Bx=Ox+Px+Qx-Ax-Cx
  同上
2012-06-06 15:06
FUNFUNHO
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-6-5
得分:0 
回复 2楼 sdta

 SOS~~~~

我明白了!  VPF的If endif 的用法跟Cpp有点不同哈~~~

[ 本帖最后由 FUNFUNHO 于 2012-6-6 15:22 编辑 ]
2012-06-06 15:16
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
==(精确比较)
在后面适当的地方加两个ENDIF
建议施主从VFP的基础学起,你这样学基础是不扎实的。

[ 本帖最后由 sdta 于 2012-6-6 15:24 编辑 ]

坚守VFP最后的阵地
2012-06-06 15:23
FUNFUNHO
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-6-5
得分:0 
回复 5楼 sdta
嗯嗯!!!
非常感谢!~
因为目前特别想将自己的一个构想实现,所以学得很凌乱……

2012-06-06 16:15
qjbzjp
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:尧的故乡
等 级:贵宾
威 望:48
帖 子:1914
专家分:4397
注 册:2007-3-14
得分:0 
假设横坐标3个点的值为:5,10,8
CLEAR
ox=5
px=10
qx=8
x1=MIN(ox,px,qx)
x3=MAX(ox,px,qx)
x2=ox
IF x2=x3 .or. x2=x1
    x2=px
    IF x2=x3 .or. x2=x1
        x2=qx
    ENDIF
ENDIF
?x1,x2,x3        

[ 本帖最后由 qjbzjp 于 2012-6-8 13:44 编辑 ]

相互学习,互相交流,共同提高。
2012-06-08 13:43
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
三点,还排序呢……

授人以渔,不授人以鱼。
2012-06-08 15:51
FUNFUNHO
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-6-5
得分:0 
回复 7楼 qjbzjp
非常感谢您~
我的做排序最终要的一点不是单纯地排出3点横坐标的大小
而是要将三个点(二维坐标)按照横坐标从小到大的顺序排列
简单的说 当横坐标排出来了 要知道它们分别与原来的哪个纵坐标配对
我目前的做法如下:
IF  MAX(a1,c1,e1)== a1
     Cx=a1
     Cy=b1
     ENDIF
   
IF MAX(a1,c1,e1)==c1 AND c1!=a1
    Cx=c1
    Cy=d1
    ENDIF
   
 IF MAX(a1,c1,e1)==e1 AND e1!=a1 AND e1!=c1
     Cx=e1
     Cy=f1
     ENDIF
     
                 && to find the smallest X and match the point
 IF  Min(a1,c1,e1)== a1
     Ax=a1
     Ay=b1
     ENDIF
  
IF Min(a1,c1,e1)==c1 AND c1!=a1
    Ax=c1
    Ay=d1
    ENDIF
   
 IF Min(a1,c1,e1)==e1 AND e1!=a1 AND e1!=c1
     Ax=e1
     Ay=f1
     ENDIF
     
                  && to find the middle one
 IF  a1+c1+e1-Ax-Cx== a1
     Bx=a1
     B=b1
     ENDIF
  
IF a1+c1+e1-Ax-Cx==c1
    Bx=c1
    B=d1
    ENDIF
   
 IF a1+c1+e1-Ax-Cx==e1
     Bx=e1
     B=f1
     ENDIF
我用了最笨的办法
对于横坐标相同的情况 目前还不知道我这样处理是否还存在问题...

有任何建议 欢迎您指点~~~

2012-06-10 00:32
FUNFUNHO
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-6-5
得分:0 
回复 8楼 TonyDeng
我又没有嫌三点排序点的数量少了……
那正常情况下作图应该如下图所示 三个小圈里的那个圈应该在小圈中

那为何会出现下面的情况啊?

那个大一点的不在横坐标上的圆圈 显然不该在三个小点组成的三角形外啊!
why???!!!







2012-06-10 00:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-370933-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.241162 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved