就是这样了.我有一个Point3D.我有一台相机.我知道相机的视角是45度; 我知道相机位置和LookDirection矢量.现在我想要一些方法来确定相机是否可以看到该点.
感谢那些已经回答并评论过的人,但是:
这对我来说不是一个简单的问题.这可能看起来很简单,但我没有找到任何特殊的方法或帮助类来解决问题.我自己尝试用纯粹的数学方法解决它,但解决方案不稳定并且无法预测:
bool isPointInCameraView(Point3D P, Point3D CP, Vector3D LD, double CameraAngle) {
//first calculate Distance to the plane formed by normal vector LD and point P on it
var D = -LD.X*P.X-LD.Y*P.Y-LD.Z*P.Z; // -AXb-BYb-CZb
//L is the distance to the plane.
double L = Math.Abs( (LD.X * CP.X + LD.Y * CP.Y + LD.Z * CP.Z + D)) / Math.Sqrt(LD.X * LD.X + LD.Y * LD.Y+LD.Z * LD.Z);
var BL = L * Math.Tan(CameraAngle); //length of bound part …Run Code Online (Sandbox Code Playgroud)给定轴向对齐的,原点居中的椭圆E外部的点p,找到通过p的E的(最多)四个唯一法线.
这不是Mathematica的问题.直接计算太慢; 我愿意为速度牺牲精度和准确性.
我在网上搜索过,但我发现所有涉及过于复杂的计算,如果直接实现,似乎缺乏我需要的性能.有没有更"程序化"的方法来做到这一点,比如使用矩阵或将椭圆缩放成圆形?
等待条件变量是否会导致循环使用指令将 CPU 内核加载到 100%?这就是在 C++ 中等待 cvar 的方式:
void worker_thread()
{
// Wait until ready turns true and the condition variable is notified
std::unique_lock<std::mutex> lk(m);
cv.wait(lk, []{return ready;}); //<-- does this load the cpu?
// Do something
}
Run Code Online (Sandbox Code Playgroud)
我假设这样的事情是底层实现:
while (1)
{
lock mutex;
if (condition) signal();
unlock mutex;
}
Run Code Online (Sandbox Code Playgroud)
由于没有 Sleep(),此代码会将运行它的处理器内核加载到 100%。
现实中会发生什么?