首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算螺旋半径,使螺旋模型在圆柱体内部。

计算螺旋半径,使螺旋模型在圆柱体内部。
EN

Stack Overflow用户
提问于 2016-02-19 21:24:28
回答 1查看 385关注 0票数 7

我正在开发一个应用程序,在这个应用程序中,我展示了一些有纹理的飞机。然而,我想要计算螺旋的半径(我在计算中使用它来创建一个螺旋),动态地基于锥宽和摄像机位置。

螺旋位于屏幕x=0、y=0、z=0的中心。

我希望这个考虑到屏幕的方向(风景/肖像),.So,远远的,这是我的代码,但似乎我遗漏了什么,因为左边和右边的飞机不在视口内。

代码语言:javascript
复制
App.prototype.calculateHelixRadius = function(){

    // plane width = height =  512;

    var friend = this.getFriend();
    var vFOV = friend.camera.fov * Math.PI / 180;
    var dist = utils.getAbsPointsDistance3D(friend.camera.position, friend.scene.position);
    var aspect = friend.settings.container.clientWidth / friend.settings.container.clientHeight;

    var frustumHeight = 2.0 * dist * Math.tan(0.5 * vFOV);
    var frustumWidth = frustumHeight * aspect;

    return utils.isLandscape() ? frustumHeight / 2 : frustumWidth / 2 ;

};

我做错了什么,为什么屏幕边缘的飞机不在里面?

这里还有getAbsPointsDistance3D的代码供参考

代码语言:javascript
复制
var utils = {

   // other helpers...

   getAbsPointsDistance3D: function(p1, p2) {

        var xd = p2.x - p1.x;
        var yd = p2.y - p1.y;
        var zd = p2.z - p1.z;

        return Math.sqrt(xd * xd + yd * yd + zd * zd);
    }

};

更新

我试过减少dist参数,但是结果不一致.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-01 05:19:03

我想知道以下是否解释了你的剪裁。

你计算你的圆锥曲线特征,然后用圆锥曲线的宽度(宽度或高度取决于屏幕的角度)计算螺旋半径.我可能在这里搞错了一些细节,因为你的问题没有完全解释细节,但是一般的概念仍然有效。下面的图片是场景的顶部视图,它显示了一个代表包围螺旋的圆柱体的圆圈。我相信你计算过radius1了。如果是这样的话,请注意圆柱体(阴影区)和螺旋线在气缸中心的“前面”会有剪裁。

相反,您需要计算圆柱体/螺旋半径,如第二幅图像所示,即需要radius2。如果图像左边的大角度是fov (再说一次,vFOV?或者hFOV?,等等,取决于你的螺旋是向上-向下,还是边对边,等等,那么它的半角是fov/2。这是相同的角度显示在圆柱体的中心。因此,您需要减小螺旋半径如下:radius2 = radius1 * cos(fov/2)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35515305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档