Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何计算法线?_Java_Math_Vector_Normalization - Fatal编程技术网

Java 如何计算法线?

Java 如何计算法线?,java,math,vector,normalization,Java,Math,Vector,Normalization,好的,假设我得到一个矩形(这都是2d),由物体a的x,y,宽度和高度组成。我如何计算它的法线?如果“法线”是指垂直向量,请看:对于向量 <a1, a2, a3> 及 叉积是 <a2 * b3 - b2 * a3, a1 * b3 - b1 * a3, a1 * b2 - b1 * a2> 。。。但是纯2D中的“法线”没有多大意义。如果“法线”指的是垂直向量,请看:中的向量 <a1, a2, a3> 及 叉积是 <a2 * b3

好的,假设我得到一个矩形(这都是2d),由物体a的x,y,宽度和高度组成。我如何计算它的法线?

如果“法线”是指垂直向量,请看:对于向量

<a1, a2, a3>


叉积是

<a2 * b3 - b2 * a3, a1 * b3 - b1 * a3, a1 * b2 - b1 * a2>

。。。但是纯2D中的“法线”没有多大意义。

如果“法线”指的是垂直向量,请看:中的向量

<a1, a2, a3>


叉积是

<a2 * b3 - b2 * a3, a1 * b3 - b1 * a3, a1 * b2 - b1 * a2>


。。。但是纯2D中的“法线”没有多大意义。

如果矩形在XY平面上,那么法线是(0,0,1)。不需要代数

如果矩形位于XY平面上,则法线为(0,0,1)。不需要代数

转到谷歌的“交叉产品”


将定义矩形边的向量作为要交叉的向量。

用谷歌搜索“交叉乘积”


将定义矩形边的向量作为要交叉的向量。

小心。矩形有两种可能的法线:

在平面中,它有4条法线:


小心点。矩形有两种可能的法线:

在平面中,它有4条法线:


整个矩形的法线将垂直于矩形平面(沿第三维)


如果您的意思是垂直于矩形的一条边(但与矩形在同一平面内),则可以计算边的坡度,并且法线的坡度将是其垂直于的边的坡度的负倒数。(如果边的坡度为零,则未定义。)如果要将此法线放置在矩形上,则边的中点是放置该法线的好位置。

整个矩形的法线将垂直于矩形平面(沿第三维)

如果您的意思是垂直于矩形的一条边(但与矩形在同一平面内),则可以计算边的坡度,并且法线的坡度将是其垂直于的边的坡度的负倒数。(如果边的坡度为零,则未定义。)如果要将该法线放置在矩形上,则边的中点是放置该法线的好位置。

Cyan

您不是在寻找由叉积或三维定义的法线。等一分钟,我会解释

编辑:

从中可以明显看出,您所寻找的只是一个垂直于直线的向量。不是垂直于平面的向量

计算

R = A - 2<A, N> N
N则是:

N = <1, 0>  // for the left hand side wall
N = <-1, 0> // for the right hand side wall
N=//用于左侧墙
N=//对于右侧墙
青色

您不是在寻找由叉积或三维定义的法线。等一分钟,我会解释

编辑:

从中可以明显看出,您所寻找的只是一个垂直于直线的向量。不是垂直于平面的向量

计算

R = A - 2<A, N> N
N则是:

N = <1, 0>  // for the left hand side wall
N = <-1, 0> // for the right hand side wall
N=//用于左侧墙
N=//对于右侧墙

cyanprime所寻找的是2D空间中1行的法线

该法线必须满足以下条件:

m_线*m_法线=-1

而m_线是线的大小,m_法线是法线的大小

=>m_正常=-1/m_线

如果m_line=0,显然会产生错误。所以你要特别对待这个案子

如果m_线不是0,则得到2D向量


法线向量=(1,m_法线)

cyanprime所寻找的是2D空间中一条直线的法线

该法线必须满足以下条件:

m_线*m_法线=-1

而m_线是线的大小,m_法线是法线的大小

=>m_正常=-1/m_线

如果m_line=0,显然会产生错误。所以你要特别对待这个案子

如果m_线不是0,则得到2D向量


法线向量=(1,m_normal)

2D中的法线是在对象中呈90度角的向量,方向与应撞击对象的方向相反

这些法线有固定值,它们是:

西部(1,0); 东部(-1,0); 北(0,-1);
南部(0,1)

2D中的法线是在对象中呈90度角的向量,与应撞击对象的方向相反

这些法线有固定值,它们是:

西部(1,0); 东部(-1,0); 北(0,-1);

南部(0,1)

你说矩形的法线是什么意思?我不知道,也许像它朝哪个方向?我需要知道它朝哪个方向,这样我才能反射它的东西。@prime在2d中,矩形只能朝一个方向,好吧,也许有两个:上下。我认为那不是你想要的。那么你需要这个法线做什么?他指的是直线的法线,不是矩形的法线。你说的矩形的法线是什么意思?我不知道,也许像它朝哪个方向?我需要知道它朝哪个方向,这样我才能反射出东西。@prime在2d中,矩形只能朝一个方向,好吗,也许两个:上下。我认为那不是你想要的。那么你需要这个法线做什么呢?他指的是直线的法线,而不是矩形的法线。叉积是指三维空间中的坐标。@Mahesh:是的,我假设这就是OP的意思,因为二维矩形的法线是三维的。使用这种方法,每个矩形的法线都是(0,0,1)。@CyanPrime:它适用于二维(正如其他人所指出的,它给出了
的倍数),但答案是3D定义的…@prime在这种情况下,你需要矩形边的法线。因为你的矩形总是与你的坐标对齐,所以你的范数
<A, N> = ax*nx + ay*ny = ax*(-bx) + ay*by = ay*by - ax*bx
R = <ax, ay> - 2*(ay*by - ax*bx) * N
  = <ax, by> - <2*(ay*by - ax*bx)*nx, 2*(ay*by - ax*bx)*ny>
  = <ax, by> - <2*(ay*by - ax*bx)*(-bx), 2*(ay*by - ax*bx)*(by)>
  = < ax + 2*bx*(ay*by - ax*bx), ay - 2*by*(ay*by - ax*bx) >
B = < 0, 100 >
B = <0, 1>
Vector length = sqrt( bx^2 + by^2 ) = sqrt( 0^2 + 1^2 ) = 1
N = <1, 0>  // for the left hand side wall
N = <-1, 0> // for the right hand side wall