2016-11-25 1 views
0

У меня есть орбита длиной 200. Но она центрирована вокруг солнца радиуса 0 (длина 0). Теперь я хочу расширить солнце до радиуса 1 и «вытолкнуть» наружные орбиты.Как «вытолкнуть» координаты XYZ, образующие трехмерную орбиту со смещением в середине

хуг координаты выглядеть следующим образом:

[-6.76, 5.75, -1.06], 
    [-6.95, 5.54, -0.91], 
    [-7.13, 5.33, -0.75], 
    [-7.31, 5.11, -0.58] 
    ... followed by 196 more coordinates 

Я пытался пытался много вещей, чтобы сделать круг больше * radius и / someNumbers. По крайней мере, попытаться сделать это сам. Но я потерял, когда я сделал if так:

If(the x coordination > 0) 
    the x coordination += 1; 
} 
Else{ 
the x coordination += 1; 
} 

А также для Y и Z, но когда они приблизились к 1 и -1 положению этой оси они пропускаются на другую сторону. Создание линии (с шириной 1 с обеих сторон) пустоты вдоль оси.

Результат awnser MBO в (вид сверху): enter image description here

// arrayIndex is a number to remember at which point it is in the orbit array 
    satellites.forEach(function (element) { 
        if (element.arrayIndex>= element.satellite.coordinates.length) { 
         element.arrayIndex= 0; 
        } 

        var posX = element.satellite.coordinates[element.arrayIndex][0]; 
        var posY = element.satellite.coordinates[element.arrayIndex][1]; 
        var posZ = element.satellite.coordinates[element.arrayIndex][2]; 

        R = Math.sqrt(posX^2 + posY^2 + posZ^2); 

        cf = (R + earthRadius)/R; 
        xnew = posX * cf; 
        ynew = posY * cf; 
        znew = posZ * cf; 

        // var posX = earthRadius * (element.satellite.coordinates[element.test][0]/(200 * earthRadius) * earthRadius); 
        // var posY = earthRadius * (element.satellite.coordinates[element.test][1]/(200 * earthRadius) * earthRadius); 
        // var posZ = earthRadius * (element.satellite.coordinates[element.test][2]/(200 * earthRadius) * earthRadius); 


        // divide by 100 to scale it down some more 
        element.position.x = xnew/100; 
        element.position.y = ynew/100; 
        element.position.z = znew/100; 

        element.arrayIndex= element.arrayIndex+ 1; 
       }); 

ответ

0

Вы радиус орбиты

/////////R = Sqrt(x^2 + y^2 + z^2) 
Edit to avoid confusion: 
R = Sqrt(x * x + y * y + z * z) 

Вам нужно изменить координаты, чтобы радиус орбиты R+r. Чтобы сохранить форму орбиты, для каждой точки найти это R, и умножить все компоненты на коэффициент (R+r)/R

R = Sqrt(x^2 + y^2 + z^2) 
cf = (R + r)/R 
xnew = x * cf 
ynew = y * cf 
znew = z * cf 
+0

он частично работает, она вырастет, но она исчезает, когда его между 2 оси, я добавил изображение в этом вопросе. (белая линия - сторона, которую она показывает) – Davidto

+0

Странно. Вы уверены в расчетах? Проверьте значения cf. Показать код, вызывающий это поведение – MBo

+0

Я построил массивы на python, прежде чем захочу использовать их в javascript, и они выглядели отлично. Я добавил код, который используется, чтобы заставить их перейти к следующей позиции. когда он исчезает cf = NaN. и когда он виден, он немного вмятится, когда он посередине – Davidto