提前判断 3/4 个点是否能够组成矩形 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
zeusrunjia
V2EX    程序员

提前判断 3/4 个点是否能够组成矩形

  •  
  •   zeusrunjia 2014-05-26 21:26:40 +08:00 4279 次点击
    这是一个创建于 4236 天前的主题,其中的信息可能已经有所发展或是发生改变。
    point有两个属性为x,y (整数).
    用户可以随机选取1到4个point, 如果期望用户选的四个point最终能够组成一个矩形,并且当用户选了几个point的时候 能够提前告诉他不可能是矩形
    比如:
    1. 1~2个point,无法预期用户选择, 此时无法判断.
    2. 3个point 本质上 如果连线没有直角, 可以提前判断不会组成矩形.
    3. 4个point 判断是否组成矩形.

    (point的x,y大小在合理的范围内, 比如0~100)

    有什么优雅的写法判断2和3过程呢
    ```
    bool check(vector<point> selects){

    }
    ```
    8 条回复    2014-05-27 18:03:09 +08:00
    zeusrunjia
        1
    zeusrunjia  
    OP
       2014-05-26 21:30:50 +08:00
    我的想法是:
    1.两个for 找出对角两个点
    2.用对角的两个点算出其他两个点, 看下算出的这两个点是否有一个落在selects中.

    不过写出来也略麻烦, 应该有更简单的办法, 用各种库都不介意的.
    muyeyang
        2
    muyeyang  
       2014-05-26 21:47:45 +08:00 via iPad   1
    严格的矩形和近似的矩形处理起来会不一样。
    近似的话,检查连续三个点的夹角是否接近90度。参考余弦定理。
    严格90度的话,直接勾股定理就行了。
    最多测试两次就够。
    khowarizmi
        3
    khowarizmi  
       2014-05-26 22:12:12 +08:00
    ls +1
    zeusrunjia
        4
    zeusrunjia  
    OP
       2014-05-26 22:42:25 +08:00
    @muyeyang 一样的, 因为连续三个点 这个定义也要写代码. 并不会减少代码量(工作量)
    akfish
        5
    akfish  
       2014-05-26 22:51:49 +08:00
    矩形这么简单的情况,brute force就行。
    l除了楼上说的,我只补充一句:两个垂直向量的点积为0。
    shoumu
        6
    shoumu  
       2014-05-26 23:56:27 +08:00
    我的思路:

    四个点:
    > 对角线相等的平行四边形是矩形
    将点分成两个组,如果长度不等,则不是矩形。如果相等,构成两个向量,看是否平行,平行的话,交换一个点,看长度是否相等。不平行的话,交换一个点,看是否相等平行。

    三个点:
    按楼上@akflsh 说的
    > 两个垂直向量的点积为0。
    也就是三个向量,两两计算点积
    nilai
        7
    nilai  
       2014-05-27 09:29:22 +08:00
    楼做是做百度地图的.
    zeusrunjia
        8
    zeusrunjia  
    OP
       2014-05-27 18:03:09 +08:00
    @nilai 才不是呢!

    貌似大家都忽略两个前提, 1.整数 2.优雅或者取巧的方案.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2793 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 14:41 PVG 22:41 LAX 06:41 JFK 09:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86