postgresql中两个向量(行)的叉积

postgresql中两个向量(行)的叉积,postgresql,postgis,pgadmin,Postgresql,Postgis,Pgadmin,我试图在postgresql中计算两个向量的叉积。 插图: 输入: 在postgresql中,使用query将这两行(向量)进行叉积,为其创建一个函数。假设这些是三维点PostGIS几何图形: CREATE OR REPLACE FUNCTION ST_CrossProduct(point_a geometry, point_b geometry) RETURNS geometry AS $BODY$SELECT ST_SetSRID(ST_MakePoint( a2 * b3 - a3

我试图在postgresql中计算两个向量的叉积。 插图: 输入:


在postgresql中,使用query将这两行(向量)进行叉积,为其创建一个函数。假设这些是三维点PostGIS几何图形:

CREATE OR REPLACE FUNCTION ST_CrossProduct(point_a geometry, point_b geometry)
  RETURNS geometry AS
$BODY$SELECT ST_SetSRID(ST_MakePoint(
  a2 * b3 - a3 * b2,
  a3 * b1 - a1 * b3,
  a1 * b2 - a2 * b1), ST_SRID($1))
FROM (SELECT
  ST_X($1) AS a1, ST_Y($1) AS a2, COALESCE(ST_Z($1), 0.0) AS a3,
  ST_X($2) AS b1, ST_Y($2) AS b2, COALESCE(ST_Z($2), 0.0) AS b3
) AS f$BODY$
LANGUAGE sql IMMUTABLE;
使用它:

SELECT ST_AsText(ST_CrossProduct(
     ST_MakePoint(6.80837996699847, 39.4163159399759, 0),
     ST_MakePoint(0, 0, 12)));

                   st_astext                    
------------------------------------------------
 POINT Z (472.995791279711 -81.7005596039816 0)
(1 row)

你试过什么,什么不起作用?叉积的基本思想是
(a2b3-a3b2,a3b1-a1b3,a1b2-a2b1)
,在SQLya中计算起来非常简单,。。但是我想试试postgresql。。它在行而不是列中PostgreSQL中没有3d点/向量的直接类型<代码>点是2d,
立方体
(contrib模块)使用n维(但不将其解释为向量):两者都缺少计算任何类型向量积的函数/运算符。你需要使用它的公式。家庭作业/考试题?@JohnBarça我明白了,它是在
c++
中实现的,但不确定是否可以在
SQL
级别调用它
SELECT ST_AsText(ST_CrossProduct(
     ST_MakePoint(6.80837996699847, 39.4163159399759, 0),
     ST_MakePoint(0, 0, 12)));

                   st_astext                    
------------------------------------------------
 POINT Z (472.995791279711 -81.7005596039816 0)
(1 row)