小编Mih*_*tat的帖子

验证点是否在3D空间中的圆锥内

考虑:

  • X(x1,y1,z1) 我需要验证它是否在锥体内.
  • M(x2,y2,z2)锥体的顶点.(锥体的顶点)
  • N(x3,y3,z3) 锥体底部中间的点.

我发现如果一个点X在锥体上,它需要验证这个等式:

cos(alfa) * ||X-M|| * ||N|| = dot(X-M,N)
Run Code Online (Sandbox Code Playgroud)

其中dot是2个向量的标量积,而alfa是这两个向量之间的角度.

根据公式,我计算出:

X-M = (x1-x2,y1-y2,z1-z2)
Run Code Online (Sandbox Code Playgroud)

所以,

cos(alfa)
  * Math.sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2)
  * Math.sqrt(x3^2 + y3^2+z3^2)
= x3(x1-x2) + y3(y1-y2) + z3(z1-z2)
Run Code Online (Sandbox Code Playgroud)

不幸的是,上述计算似乎给我错误的结果.我究竟做错了什么?

另外我怀疑要检查是否X在锥体内部,我必须放入<=而不是=在公式中.它是否正确?

这个的用法是:我开发了一种游戏,当一个物体处于"视野"时,机枪必须开始射击.这个视图将是一个圆锥体.锥体的顶点将位于机枪中,锥体的底部将位于前方的某个已知距离处.进入这个锥体的任何物体,机枪都会射击它.

java android opengl-es formula

7
推荐指数
1
解决办法
8242
查看次数

从visual C++调用C#代码

基本上我需要从Visual C++代码调用C#代码.在阅读了很多关于可能方法的文章后,我决定使用C++/CLI机制.

最初我决定在C++本机代码(dll库项目)中有一些函数,它们将调用CLR项目中的一些函数,这些函数将调用C#项目中的一些函数.

在那之后,我想也许我可以摆脱桥梁项目(CLR项目),因为它只是向管理世界过渡.我认为我可以创建我的原生项目,我可以添加一个c ++源文件,我可以只为该文件而不是整个项目启用CLR支持.所以这意味着我的本机项目将只包含一个可以使用C++/CLI语法并代表桥接的文件.所有其他文件只是本机C++源文件.从设计的角度看这是对的吗?!

为了做到这一点,我想我必须将托管C#dll文件添加到C++本机dll文件的其他#using Directories属性中.问题是我不知道如何根据当前配置设置C#dll调试或发布版本的路径.

另外我知道我不能将本机C++ DLL添加到C#项目引用中.但看起来我可以在本机C++项目中添加一个C#dll作为引用.怎么会 ?!这甚至有用吗?如果我可以将C#dll添加到本机C++项目引用中,是否需要设置#using目录?

c# c++ c++-cli

2
推荐指数
1
解决办法
1038
查看次数

标签 统计

android ×1

c# ×1

c++ ×1

c++-cli ×1

formula ×1

java ×1

opengl-es ×1