如何做sql server 2008 空间数据里面两点的矢量夹角

clear_zero 2011-09-27 10:46:52
我的表格里面有三列ID,GInfo,Rotation
其中GInfo是geometry类型的数据,里面是Polygon. 我现在想选出GInfo里面startpoint的矢量夹角=Rotation的数值的数据

如果上面过于复杂,下面有两个自定义的点。我该如何写才能得到其矢量夹角=180度或者PI呢
谢谢
DECLARE @g geometry;
DECLARE @h geometry;
SET @g = geometry::STGeomFromText('POINT(20 10)', 0);
SET @h = geometry::STGeomFromText('POINT(10 10)', 0);
...全文
136 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jenhon 2011-09-29
  • 打赏
  • 举报
回复
之所以写这么多,是因为我们国内的解析几何跟欧美那边好像不是很统一,我们的象限角是从0~2pi,而计算机里面是正负pi,所以才需要那么多转换,要不就一对case when。
clear_zero 2011-09-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jenhon 的回复:]

这个很难吗?
(2点重合算90度=pi/2,)

select a_gh=
case
when @g.STX=@h.STX then
case when @g.STY<=@h.STY then pi()/2 else 1.5*pi() end
else case
when @g.STX<@h.STX and @g.STY<=@h.STY then at……
[/Quote]
你这样我也会算的,这是我觉得这样不简洁。一个query里面要写好多,不知道spatial data本身有没有好的函数
jenhon 2011-09-28
  • 打赏
  • 举报
回复
这个很难吗?
(2点重合算90度=pi/2,)

select a_gh=
case
when @g.STX=@h.STX then
case when @g.STY<=@h.STY then pi()/2 else 1.5*pi() end
else case
when @g.STX<@h.STX and @g.STY<=@h.STY then atan((@h.STY-@g.STY)/(@h.STX-@g.STX))
when @g.STX>@h.STX and @g.STY<=@h.STY then pi()-atan((@h.STY-@g.STY)/(@h.STX-@g.STX))
when @g.STX<@h.STX and @g.STY>=@h.STY then pi()+atan((@h.STY-@g.STY)/(@h.STX-@g.STX))
when @g.STX>@h.STX and @g.STY>=@h.STY then 2*pi()-atan((@h.STY-@g.STY)/(@h.STX-@g.STX))
end
end
clear_zero 2011-09-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jenhon 的回复:]

楼主意思是求2个点组成的 直线 的 斜率?
[/Quote]
对,就是两个点组成直线矢量的斜率
jenhon 2011-09-28
  • 打赏
  • 举报
回复
楼主意思是求2个点组成的 直线 的 斜率?
jenhon 2011-09-28
  • 打赏
  • 举报
回复
2个点怎么夹?

如果是求2个点分别与point(0 0)的连线 之间的夹角,那就容易办,换算成为极坐标。
clear_zero 2011-09-27
  • 打赏
  • 举报
回复
我尝试用比较简单的atan来做但是这个方法不会自动滤掉y2-y1=0的情况

怎么才能比较聪明的作这个呢,快被刺激死了
clear_zero 2011-09-27
  • 打赏
  • 举报
回复
忘记说了,我可以找到distance,但是我要的是夹角

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧