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

     

  • 相关阅读:
    hdu 5366 简单递推
    hdu 5365 判断正方形
    hdu 3635 并查集
    hdu 4497 数论
    hdu5419 Victor and Toys
    hdu5426 Rikka with Game
    poj2074 Line of Sight
    hdu5425 Rikka with Tree II
    hdu5424 Rikka with Graph II
    poj1009 Edge Detection
  • 原文地址:https://www.cnblogs.com/quanweiru/p/2698874.html
Copyright © 2011-2022 走看看