|
修改了 67 楼,规定了一下向量的方向,当考察正方形的某个顶点时,以这个顶点为中心,方向指向其它顶点和被考察的外面的点
SQL>
SQL> with t as (select level n from dual connect by level <= 6),
2 p as (select row_number() over(order by t1.n,t2.n) rn,t1.n x,t2.n y from t t1,t t2),
3 s as (
4 select p1.x x1,p1.y y1,
5 p2.x x2,p2.y y2,
6 p3.x x3,p3.y y3,
7 p4.x x4,p4.y y4
8 from p p1,p p2,p p3,p p4
9 where p1.rn < p2.rn
10 and p2.rn < p3.rn
11 and p3.rn < p4.rn
12 and (p2.x-p1.x)*(p3.x-p1.x)+(p2.y-p1.y)*(p3.y-p1.y) = 0
13 and (p2.x-p1.x)*(p4.x-p2.x)+(p2.y-p1.y)*(p4.y-p2.y) = 0 and (p3.x-p1.x)*(p4.x-p3.x)+(p3.y-p1.y)*(p4.y-p3.y) = 0
14 and power((p2.x-p1.x),2)+power((p2.y-p1.y),2) = power((p3.x-p1.x),2)+power((p3.y-p1.y),2)
15 )
16 select
17 /*s1.x1 x1,s1.y1 y1,
18 s1.x2 x2,s1.y2 y2,
19 s1.x3 x3,s1.y3 y3,
20 s1.x4 x4,s1.y4 y4,
21 s2.x1 x5,s2.y1 y5,
22 s2.x2 x6,s2.y2 y6,
23 s2.x3 x7,s2.y3 y7,
24 s2.x4 x8,s2.y4 y8 */
25 count(*)
26 from s s1,s s2
27 where ( (s2.x1-s1.x1)*(s1.x3-s1.x1)+(s2.y1-s1.y1)*(s1.y3-s1.y1) < 0
28 or (s2.x1-s1.x1)*(s1.x2-s1.x1)+(s2.y1-s1.y1)*(s1.y2-s1.y1) < 0
29 or (s2.x1-s1.x2)*(s1.x4-s1.x2)+(s2.y1-s1.y2)*(s1.y4-s1.y2) < 0
30 or (s2.x1-s1.x2)*(s1.x1-s1.x2)+(s2.y1-s1.y2)*(s1.y1-s1.y2) < 0
31 or (s2.x1-s1.x3)*(s1.x1-s1.x3)+(s2.y1-s1.y3)*(s1.y1-s1.y3) < 0
32 or (s2.x1-s1.x3)*(s1.x4-s1.x3)+(s2.y1-s1.y3)*(s1.y4-s1.y3) < 0
33 or (s2.x1-s1.x4)*(s1.x2-s1.x4)+(s2.y1-s1.y4)*(s1.y2-s1.y4) < 0
34 or (s2.x1-s1.x4)*(s1.x3-s1.x4)+(s2.y1-s1.y4)*(s1.y3-s1.y4) < 0 )
35 and ( (s2.x2-s1.x1)*(s1.x3-s1.x1)+(s2.y2-s1.y1)*(s1.y3-s1.y1) < 0
36 or (s2.x2-s1.x1)*(s1.x2-s1.x1)+(s2.y2-s1.y1)*(s1.y2-s1.y1) < 0
37 or (s2.x2-s1.x2)*(s1.x4-s1.x2)+(s2.y2-s1.y2)*(s1.y4-s1.y2) < 0
38 or (s2.x2-s1.x2)*(s1.x1-s1.x2)+(s2.y2-s1.y2)*(s1.y1-s1.y2) < 0
39 or (s2.x2-s1.x3)*(s1.x1-s1.x3)+(s2.y2-s1.y3)*(s1.y1-s1.y3) < 0
40 or (s2.x2-s1.x3)*(s1.x4-s1.x3)+(s2.y2-s1.y3)*(s1.y4-s1.y3) < 0
41 or (s2.x2-s1.x4)*(s1.x2-s1.x4)+(s2.y2-s1.y4)*(s1.y2-s1.y4) < 0
42 or (s2.x2-s1.x4)*(s1.x3-s1.x4)+(s2.y2-s1.y4)*(s1.y3-s1.y4) < 0 )
43 and ( (s2.x3-s1.x1)*(s1.x3-s1.x1)+(s2.y3-s1.y1)*(s1.y3-s1.y1) < 0
44 or (s2.x3-s1.x1)*(s1.x2-s1.x1)+(s2.y3-s1.y1)*(s1.y2-s1.y1) < 0
45 or (s2.x3-s1.x2)*(s1.x4-s1.x2)+(s2.y3-s1.y2)*(s1.y4-s1.y2) < 0
46 or (s2.x3-s1.x2)*(s1.x1-s1.x2)+(s2.y3-s1.y2)*(s1.y1-s1.y2) < 0
47 or (s2.x3-s1.x3)*(s1.x1-s1.x3)+(s2.y3-s1.y3)*(s1.y1-s1.y3) < 0
48 or (s2.x3-s1.x3)*(s1.x4-s1.x3)+(s2.y3-s1.y3)*(s1.y4-s1.y3) < 0
49 or (s2.x3-s1.x4)*(s1.x2-s1.x4)+(s2.y3-s1.y4)*(s1.y2-s1.y4) < 0
50 or (s2.x3-s1.x4)*(s1.x3-s1.x4)+(s2.y3-s1.y4)*(s1.y3-s1.y4) < 0 )
51 and ( (s2.x4-s1.x1)*(s1.x3-s1.x1)+(s2.y4-s1.y1)*(s1.y3-s1.y1) < 0
52 or (s2.x4-s1.x1)*(s1.x2-s1.x1)+(s2.y4-s1.y1)*(s1.y2-s1.y1) < 0
53 or (s2.x4-s1.x2)*(s1.x4-s1.x2)+(s2.y4-s1.y2)*(s1.y4-s1.y2) < 0
54 or (s2.x4-s1.x2)*(s1.x1-s1.x2)+(s2.y4-s1.y2)*(s1.y1-s1.y2) < 0
55 or (s2.x4-s1.x3)*(s1.x1-s1.x3)+(s2.y4-s1.y3)*(s1.y1-s1.y3) < 0
56 or (s2.x4-s1.x3)*(s1.x4-s1.x3)+(s2.y4-s1.y3)*(s1.y4-s1.y3) < 0
57 or (s2.x4-s1.x4)*(s1.x2-s1.x4)+(s2.y4-s1.y4)*(s1.y2-s1.y4) < 0
58 or (s2.x4-s1.x4)*(s1.x3-s1.x4)+(s2.y4-s1.y4)*(s1.y3-s1.y4) < 0 )
COUNT(*)
----------
3565 |
|