小编Tim*_*sov的帖子

如何确定某个Point3D是否在摄像机视图范围内?

就是这样了.我有一个Point3D.我有一台相机.我知道相机的视角是45度; 我知道相机位置和LookDirection矢量.现在我想要一些方法来确定相机是否可以看到该点.

所以p1应该可见,p2不应该 感谢那些已经回答并评论过的人,但是:

  1. 这对我来说不是一个简单的问题.这可能看起来很简单,但我没有找到任何特殊的方法或帮助类来解决问题.我自己尝试用纯粹的数学方法解决它,但解决方案不稳定并且无法预测:

    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)

.net c# directx 3d wpf

6
推荐指数
1
解决办法
1463
查看次数

找到椭圆的所有4个法线

给定轴向对齐的,原点居中的椭圆E外部的点p,找到通过p的E的(最多)四个唯一法线.

这不是Mathematica的问题.直接计算太慢; 我愿意为速度牺牲精度和准确性.

我在网上搜索过,但我发现所有涉及过于复杂的计算,如果直接实现,似乎缺乏我需要的性能.有没有更"程序化"的方法来做到这一点,比如使用矩阵或将椭圆缩放成圆形?

math geometry ellipse computational-geometry

5
推荐指数
1
解决办法
1649
查看次数

等待条件变量是否会加载 CPU 内核?

等待条件变量是否会导致循环使用指令将 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%。

现实中会发生什么?

c++ multithreading

5
推荐指数
1
解决办法
1634
查看次数

标签 统计

.net ×1

3d ×1

c# ×1

c++ ×1

computational-geometry ×1

directx ×1

ellipse ×1

geometry ×1

math ×1

multithreading ×1

wpf ×1