zoukankan      html  css  js  c++  java
  • 判断坐标每4点是否成矩形

    在坐标点表CUX_POINTS里,找出每4个点是否围成矩形,如ABCD, EFGH, IJKL 成矩形。

     

     

    CREATE TABLE CUX_POINTS

    (

    SEGMENT1 VARCHAR2(30 BYTE),

    ROW_POSITION NUMBER,

    COLUMN_POSITION NUMBER

    )

     

    --A(1,1),B(1,2),C21),D22),E(3,3),F34),G(4,3),H44

     

    ----------------------------------------------------------------------------

     

     

     

    BEGIN

     

    INSERT INTO CUX_POINTS VALUES('A', 1, 1);

    INSERT INTO CUX_POINTS VALUES('B', 1, 2);

    INSERT INTO CUX_POINTS VALUES('C', 2, 1);

    INSERT INTO CUX_POINTS VALUES('D', 2, 2);

     

    INSERT INTO CUX_POINTS VALUES('E', 3, 3);

    INSERT INTO CUX_POINTS VALUES('F', 3, 4);

    INSERT INTO CUX_POINTS VALUES('G', 4, 3);

    INSERT INTO CUX_POINTS VALUES('H', 4, 4);

     

    INSERT INTO CUX_POINTS VALUES('I', 5, 5);

    INSERT INTO CUX_POINTS VALUES('J', 5, 6);

    INSERT INTO CUX_POINTS VALUES('K', 6, 5);

    INSERT INTO CUX_POINTS VALUES('L', 6, 6);

     

    COMMIT;

     

    END;

     

    ----------------------------------------------------------------------------

     

    SELECT REPLACE(E.RECT, ',', '') RECT, E.RECT_POSITION

    FROM(

    SELECT D.RECT, D.RECT_POSITION, ROW_NUMBER() OVER(PARTITION BY D.RECT ORDER BY D.RECT) ID

    FROM

    (

    SELECT (CASE WHEN ASCII(C1.LINE)<ASCII(C2.LINE) THEN (C1.LINE|| ',' ||C2.LINE) ELSE (C2.LINE|| ',' ||C1.LINE) END) RECT,

    (C1.POSITION1||'('||C1.X1||','||C1.Y1||')' || ' ' ||C1.POSITION2||'('||C1.X2||','||C1.Y2||')'

    || ' ' || C2.POSITION1||'('||C2.X1||','||C2.Y1||')' || ' ' ||C2.POSITION2||'('||C2.X2||','||C2.Y2||')') RECT_POSITION

    FROM

    (

    SELECT B.LINE, B.POSITION1, B.X1, B.Y1, B.POSITION2, B.X2, B.Y2, B.ID

    FROM(

    SELECT A.LINE, A.POSITION1, A.X1, A.Y1, A.POSITION2, A.X2, A.Y2, ROW_NUMBER() OVER(PARTITION BY A.LINE ORDER BY A.LINE) ID

    FROM(

    SELECT (CASE WHEN ASCII(P1.SEGMENT1)<ASCII(P2.SEGMENT1) THEN (P1.SEGMENT1|| ',' ||P2.SEGMENT1) ELSE (P2.SEGMENT1|| ',' ||P1.SEGMENT1) END) LINE,

    P1.SEGMENT1 POSITION1, P1.ROW_POSITION X1, P1.COLUMN_POSITION Y1, P2.SEGMENT1 POSITION2, P2.ROW_POSITION X2, P2.COLUMN_POSITION Y2

    FROM CUX_POINTS P1, CUX_POINTS P2

    WHERE 1=1

    AND P1.ROW_POSITION = P2.ROW_POSITION

    AND P1.SEGMENT1 <> P2.SEGMENT1

    ) A

    ) B

    WHERE 1=1

    AND B.ID = 1

    ) C1

    ,

    (

    SELECT B.LINE, B.POSITION1, B.X1, B.Y1, B.POSITION2, B.X2, B.Y2, B.ID

    FROM(

    SELECT A.LINE, A.POSITION1, A.X1, A.Y1, A.POSITION2, A.X2, A.Y2, ROW_NUMBER() OVER(PARTITION BY A.LINE ORDER BY A.LINE) ID

    FROM(

    SELECT (CASE WHEN ASCII(P1.SEGMENT1)<ASCII(P2.SEGMENT1) THEN (P1.SEGMENT1|| ',' ||P2.SEGMENT1) ELSE (P2.SEGMENT1|| ',' ||P1.SEGMENT1) END) LINE,

    P1.SEGMENT1 POSITION1, P1.ROW_POSITION X1, P1.COLUMN_POSITION Y1, P2.SEGMENT1 POSITION2, P2.ROW_POSITION X2, P2.COLUMN_POSITION Y2

    FROM CUX_POINTS P1, CUX_POINTS P2

    WHERE 1=1

    AND P1.ROW_POSITION = P2.ROW_POSITION

    AND P1.SEGMENT1 <> P2.SEGMENT1

    ) A

    ) B

    WHERE 1=1

    AND B.ID = 1

    ) C2

    WHERE 1=1

    AND C1.Y1 = C2.Y1

    AND C1.Y2 = C2.Y2

    AND SUBSTR(TRIM(C1.LINE), 1, INSTR(TRIM(C1.LINE), ',', 1)-1) <> SUBSTR(TRIM(C2.LINE), 1, INSTR(TRIM(C2.LINE), ',', 1)-1)

    AND SUBSTR(TRIM(C1.LINE), 1, INSTR(TRIM(C1.LINE), ',', 1)-1) <> SUBSTR(TRIM(C2.LINE), INSTR(TRIM(C2.LINE), ',', 1)+1)

    AND SUBSTR(TRIM(C2.LINE), INSTR(TRIM(C1.LINE), ',', 1)+1) <> SUBSTR(TRIM(C2.LINE), 1, INSTR(TRIM(C2.LINE), ',', 1)-1)

    AND SUBSTR(TRIM(C1.LINE), INSTR(TRIM(C1.LINE), ',', 1)+1) <> SUBSTR(TRIM(C2.LINE), INSTR(TRIM(C2.LINE), ',', 1)+1)

    ) D

    ) E

    WHERE 1=1

    AND E.ID = 1

     

  • 相关阅读:
    地址级联选择器(element-china-area-data插件)
    el-table在每一行拿到对应的index(scope.$index)
    el-table中的label换行问题(重点white-space)
    调用outlook来发送邮件
    利用apifox来测试API
    注解@ConfigurationProperties使用方法
    异步加载js,兼容IE
    Exceptionless安装的一些坑
    MVC 源码系列之控制器执行(二)
    MVC 源码系列之控制器执行(一)
  • 原文地址:https://www.cnblogs.com/quanweiru/p/2698874.html
Copyright © 2011-2022 走看看