Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.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
Javascript 相对于点放置对象_Javascript_Math_Three.js_Position - Fatal编程技术网

Javascript 相对于点放置对象

Javascript 相对于点放置对象,javascript,math,three.js,position,Javascript,Math,Three.js,Position,我有一些javascript代码,试图将一些对象相对于中心点放置在彼此上方,在本例中0,0 问题是,对象的数量、对象的大小以及对象之间的间距都是可变的 请看下面这张图片,它最好地解释了我的情况(希望如此): 因此,在这种情况下,中心点是绿点,网格中心位置是黄点。 Mh表示网格高度(可变) Sh表示间距高度(可变) 我试图展示黄点计算背后的逻辑。但是,当我尝试用javascript实现这一点时,它可以工作3行,但在其他行上会中断 这就是我迄今为止所尝试的: var data = { te

我有一些javascript代码,试图将一些对象相对于中心点放置在彼此上方,在本例中
0,0
问题是,对象的数量、对象的大小以及对象之间的间距都是可变的

请看下面这张图片,它最好地解释了我的情况(希望如此):

因此,在这种情况下,中心点是绿点,网格中心位置是黄点。
Mh
表示网格高度(可变)
Sh
表示间距高度(可变)
我试图展示黄点计算背后的逻辑。但是,当我尝试用javascript实现这一点时,它可以工作3行,但在其他行上会中断

这就是我迄今为止所尝试的:

var data = {
    text : ["THE NEXT","POINT","OF VIEW"],
    size : 5,
    height : 2,
    curveSegments : 12,
    line_height : 2
};

function generateTextGeometry(mesh) {

    var scaled_lineheight = map_r(data.size, 2, 75, 0.5, 20);
    var y_start =  (0 - data.text.length * data.size / 2 - data.size / 2 - (data.text.length - 1) * scaled_lineheight)/2;
    var loader = new THREE.FontLoader();

    loader.load( 'data/suisse_2.json', function ( font ) {

        for (var i = data.text.length - 1; i >= 0; i--) {
            var geometry = new THREE.TextGeometry( data.text[i], {
                font: font,
                size: data.size,
                height: data.height,
                curveSegments: data.curveSegments
            });
            geometry.center();
            mesh.children[i].geometry = geometry;
            mesh.children[i].position.y = y_start;

            console.log(mesh.children[i].position);

            if (i < data.text.length) {
                y_start += (data.size + scaled_lineheight);
            }else{
                y_start += data.size;
            }
        }
        console.log('-----------------------');
    });
}
var数据={
正文:[“下一个”、“观点”、“观点”],
尺码:5,
身高:2,
曲线段:12,
线条高度:2
};
函数generateTextGeometry(网格){
var scaled_lineheight=地图(data.size,2,75,0.5,20);
变量y_start=(0-data.text.length*data.size/2-data.size/2-(data.text.length-1)*缩放的_线宽)/2;
var loader=new THREE.FontLoader();
load('data/suisse_2.json',函数(字体){
对于(var i=data.text.length-1;i>=0;i--){
var geometry=new THREE.TextGeometry(data.text[i]{
字体:字体,
大小:data.size,
高度:data.height,
curveSegments:data.curveSegments
});
几何中心();
mesh.children[i].geometry=geometry;
mesh.children[i].position.y=y\u start;
console.log(mesh.children[i].position);
if(i
当i console.log记录3行的位置时,它是正常的:

p{x:0,y:-6.30136986301369,z:0}
p{x:0,y:0,z:0}
p{x:0,y:6.30136986301369,z:0}

但对于任何其他数量的行,它都是错误的:

p{x:0,y:-4.4006849315068495,z:0}
p{x:0,y:1.9006849315068495,z:0}

所以我的最后一个问题是,我如何总是从绿色中心得到正确位置上的黄色位置?我目前的逻辑有什么问题


如果有任何不清楚的地方,请告诉我!所以我可以澄清

所以在阅读了我自己的问题20次之后。阳光照在我的脑袋上哈哈

所以我在计算初始开始时犯了一个错误,这里是更新的行:

var y_start =  0 - (((data.text.length - 1) * data.size) + ((data.text.length - 1) * scaled_lineheight))/ 2;