12
返回列表 发新帖
楼主: 〇〇

如何用SQL找直线在某个区间内的整数点

[复制链接]
论坛徽章:
32
祖国60周年纪念徽章
日期:2009-10-09 08:28:002013年新春福章
日期:2013-02-25 14:51:24迷宫蛋
日期:2013-06-28 11:09:23ITPUB季度 技术新星
日期:2013-07-30 16:04:58优秀写手
日期:2013-12-18 09:29:132014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09红孩儿
日期:2014-03-04 16:40:38美羊羊
日期:2015-02-16 16:36:28懒羊羊
日期:2015-03-04 14:52:11
11#
发表于 2017-2-7 10:47 | 只看该作者
把除法换成乘法简化一点:
SQL> with
  2  tmp0 as(
  3  select 1 p1x, 3 p1y, -1 p2x,-2 p2y from dual),
  4  tmpx as(
  5  select -5 + rownum - 1 xval from dual connect by rownum <= 100), -- x>=-5
  6  tmpy as(
  7  select  5 - rownum + 1 yval from dual connect by rownum <= 100), -- y<= 5
  8  tmpxl as(
  9  select p1x, p1y, (p1x-p2x)/(p1y-p2y) xl from tmp0)
10  select a.xval, b.yval
11    from tmpx a, tmpy b, tmpxl c
12   where (a.xval - c.p1x)=(b.yval - c.p1y)* c.xl
13  /
      XVAL       YVAL
---------- ----------
         1          3
        -1         -2
        -3         -7
        -5        -12

使用道具 举报

回复
论坛徽章:
18
优秀写手
日期:2014-02-27 06:00:13秀才
日期:2017-12-12 09:52:44秀才
日期:2017-08-11 15:37:32弗兰奇
日期:2017-07-04 09:16:01秀才
日期:2017-06-29 10:16:48乌索普
日期:2017-05-26 08:58:24娜美
日期:2017-05-18 16:07:23ITPUB15周年纪念
日期:2017-05-02 15:22:36妮可·罗宾
日期:2017-04-06 10:06:19处女座
日期:2016-03-10 09:03:26
12#
发表于 2017-2-7 13:57 | 只看该作者
-- (1,3)  (-1,-2)
with tmp as
--斜率
(select  (-2-3)/(-1-1) as k  from dual ),
tmp1
as
-- 斜截式常量b;  y=kx+b  
(select  3- k *1  as  b  from tmp),
tmp2
as
-- 斜截式定义域   y=kx+b  ;
---5<=x,y<=5
-- x ∈ [ LEAST(MAX_X, -5) , GREATEST(MAX_X, -5) ]
(select  (5-  t.b)/t1.k  as max_x  from tmp1 t, tmp t1)
-- 取定义域内的整数,过滤Y的非整数
SELECT *
FROM   (SELECT X,
                (SELECT K
                  FROM   TMP) * X + (SELECT B
                                     FROM   TMP1) AS Y
         FROM   (SELECT LEVEL - 6 AS X
                  FROM   DUAL
                  CONNECT BY LEVEL <=
                             (SELECT CEIL(GREATEST(MAX_X, -5) - LEAST(MAX_X, -5))
                              FROM   TMP2)))
WHERE  CEIL(Y) = Y  

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
13#
 楼主| 发表于 2017-2-7 14:51 | 只看该作者

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表