Если нужно именно цилиндры использовать для соединений в молекуле, то можно сделать так:
1. Вычислить вектор между центрами двух шаров. v1 = $Sphere02.pos - $Sphere01.pos
2. Исходный цилиндр должен стоять в начале координат и направлен вверх.
Тогда вектор его оси будет v2 = [0,0,1]
3. Итоговая ориентация цилиндра определяется матрицей поворота совмещающей вектора v1 и v2.
Есть матрица поворота вокруг единичного вектора (оси) на заданный угол. Ее можно найти на
википедии по запросу "матрица поворота".
4. Единичный вектор вокруг которого происходит вращение равен векторному произведения векторов
v1 и v2: a = normalize (cross v1 v2).
5. Сам угол между векторами не нужен, нужен только его косинус. Косинус этого угла равен скалярному
произведению этих векторов, при условии что они нормализованны:
v1 = normalize v1
v2 = normalize v2
prod = v1.x*v2.x+v1.y*v2.y+v1.z*v2.z
cos_ang = prod
6. понадобится также синус этого угла:
sin_ang = sqrt(1 - cos_ang*cos_ang)
7. Матрица ориентации цилиндра будет иметь вид:
MR = matrix3 0
MR.row1 = [(cos_ang + (1 - cos_ang)*a.x*a.x), ((1 - cos_ang)*a.x*a.y - sin_ang*a.z), ((1 - cos_ang)*a.x*a.z + sin_ang*a.y)]
MR.row2 = [((1 - cos_ang)*a.y*a.x + sin_ang*a.z), (cos_ang + (1 - cos_ang)*a.y*a.y), ((1 - cos_ang)*a.y*a.z - sin_ang*a.x)]
MR.row3 = [((1 - cos_ang)*a.z*a.x - sin_ang*a.y), ((1 - cos_ang)*a.z*a.y + sin_ang*a.x), (cos_ang + (1 - cos_ang)*a.z*a.z)]
8. Для итоговой матрицы трансформации цилиндра необходимо его положение. Оно совпадает с центром первой сферы:
MR.row4 = $Sphere01.pos
9. В итоге нужно просто полученную матрицу использовать в качестве матрицы трансформации цилиндра:
$Cylinder01.transform = MR
p.s. Но если не сущесвенно какими будут соединения в молекуле, по-моему, лучще соединить центры сфер сплайнами
в режиме corner и наложить на них модификатор edit_mesh. Получатся теже цилиндры, но гораздо проще... )