Определите точку (Vector3), которая будет центром.Давайте назовем c .
. Определите расстояние (float) как длину радиуса.Назовите это R .
Представьте себе вертикальную линию через c длиной 2R :
| \
| )R
| /
c
| \
| )R
| /
Сфераничего, кроме множества окружностей, расположенных один под другим:
--|-- circunference 1
-----|----- circunference 2
-------|------- circunference 3
--------c-------- circunference 4
-------|------- circunference 5
-----|----- circunference 6
--|-- circunference 7
Теперь вам нужно определить, сколько окружностей вы хотите иметь в своей сфере, чем больше у вас будет, тем лучше оно будет выглядеть (и тем тяжелеетоже).В этом примере мы используем 7 окружностей.У нас должна быть позиция (по оси Y) для каждого из них, ее легко оценить.
Как оценить радиус любой из этих окружностей?Давайте рассмотрим пример оценки радиуса окружности 1:
.--|-- .--| by definition, we have this
---\-|----- |\ | h height h (it is not c.y + R,
------\|------- | \| is something below that)
--------c-------- => '--c
-------|------- x
-----|-----
--|--
Мы знаем, что cos(angle) = h / R
, поэтому мы оцениваем угол как angle = arccos(h / R)
.
Радиус x должно быть R * sin(angle)
.
Последний шаг - это решить, сколько кубов вы должны создать в каждой окружности.Вы можете решить, основываясь на длине окружности (2πr).Вы можете просто предположить, что для некоторой длины L будет один куб, поэтому для любой длины 2πr должно быть 2πr / L кубов.Позиции каждого куба вы можете легко оценить:
Предположим, для окружности 1 радиуса r , 2πr / L = 3, поэтому у нас будет 3 куба:
^ _.----[2] ^
| .' '. | [][][] circunference 1
| / \ | [][][][][]
z| [1] c | y| [][][][][][][] ...
| \ / | [][][][][]
| '. .' | [][][] curcunference 7
| ''----[3] |
|----------------------------> |---------------------------->
x x
Очевидно, что чем меньше вы определяете L , тем больше будет кубиков и лучше будет выглядеть.