Геометрию вспоминать начал относительно недавно.
Реализовал отрисовку фигуры на скрине через параметрическое уравнение сферы.
С отображением ее относительно других осей тоже проблем не возникло,
но столкнулся с ее поворотом по оси Z в зависимости от angle - угла поворота кастующего юнита. Собственно сабж - как это можно сделать, а то уже в который раз пытаюсь, а сфера либо остается в том же положении, либо ее форма искажается.
        float x = GetUnitX(GetTriggerUnit())
        float y = GetUnitY(GetTriggerUnit())        
        float angle = GetUnitFacing(GetTriggerUnit())
    
        float j = 0
        float i = 0
        loop
            exitwhen j>=180
                    j+=15
                    loop
                        exitwhen i>=360   

                        i+=10

                        ES_Sphere sphere = ES_Sphere.create(0,0,0) 
                        
                        sphere.x = x+  150*Sin(j*bj_DEGTORAD)*Cos((i+angle)*bj_DEGTORAD)
                        sphere.y = y+  150*Cos(j*bj_DEGTORAD) 
                        sphere.z = 150+ 150*Sin(j*bj_DEGTORAD)*Sin((i+angle)*bj_DEGTORAD)

                    endloop
                    i=0
        endloop

Принятый ответ

Doc:
Спасибо. Сделал через двухмерную матрицу поворота (тк поворачиваем только Х и У), и в итоге получили обычный поворот вектора и решение таково:
float newx = 150*Sin(j*bj_DEGTORAD)*Cos(i*bj_DEGTORAD)
float newy = 150*Cos(j*bj_DEGTORAD) 
sphere.z = 150+ 150*Sin(j*bj_DEGTORAD)*Sin(i*bj_DEGTORAD)
                        
sphere.x = newx*Cos(angle*bj_DEGTORAD) - newy*Sin(angle*bj_DEGTORAD) + x
sphere.y = newx*Sin(angle*bj_DEGTORAD) + newy*Cos(angle*bj_DEGTORAD) + y       
Если у кого-то получится упростить, то буду очень признателен.
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
3
29
6 лет назад
3
Ну самое простое это берем матрицу поворота 4х4 и запихиваем туда нужные углы. Затем каждую "точку" сферы умножаем на эту матрицу типа M * v(x, y, z, 1), получаем четырехмерный вектор, координату w выкидываем. Я не очень силен в 3д линейной алгебре.
7
29
6 лет назад
Отредактирован Msey
7
Doc:
Спасибо. Сделал через двухмерную матрицу поворота (тк поворачиваем только Х и У), и в итоге получили обычный поворот вектора и решение таково:
float newx = 150*Sin(j*bj_DEGTORAD)*Cos(i*bj_DEGTORAD)
float newy = 150*Cos(j*bj_DEGTORAD) 
sphere.z = 150+ 150*Sin(j*bj_DEGTORAD)*Sin(i*bj_DEGTORAD)
                        
sphere.x = newx*Cos(angle*bj_DEGTORAD) - newy*Sin(angle*bj_DEGTORAD) + x
sphere.y = newx*Sin(angle*bj_DEGTORAD) + newy*Cos(angle*bj_DEGTORAD) + y       
Если у кого-то получится упростить, то буду очень признателен.
Загруженные файлы
Принятый ответ
0
29
6 лет назад
0
Нечего упрощать, это стандартная формула поворта двумерного вектора.
0
29
6 лет назад
0
Благодарю.
2
27
6 лет назад
2
Msey, красота получилась
1
32
4 года назад
Отредактирован N7 Molot
1
Так и как сферу вращать то в итоге?
Вот сделал на луа и эффектах, но чёт итог не ясен
			local x = GetUnitX(GetTriggerUnit())
			local y = GetUnitY(GetTriggerUnit())
			local angle = GetUnitFacing(GetTriggerUnit())
			local k = 0
			for j = 0, 180, 15 do
				for i = 0, 360, 10 do
					k = k + 1
					local eff = AddSpecialEffect("Units\\Creeps\\MurgulReaver\\MurgulReaver", 0, 0)
					BlzSetSpecialEffectYaw(eff, math.rad(angle))
					--local nx = x + 150 * Sin(j * bj_DEGTORAD) * Cos((i + angle) * bj_DEGTORAD)
					--local ny = y + 150 * Cos(j * bj_DEGTORAD)
					--local nz = 600 + 150 * Sin(j * bj_DEGTORAD) * Sin((i + angle) * bj_DEGTORAD)
					local newx = 150 * Sin(j * bj_DEGTORAD) * Cos(i * bj_DEGTORAD)
					local newy = 150 * Cos(j * bj_DEGTORAD)
					local nz = 600 + 150 * Sin(j * bj_DEGTORAD) * Sin(i * bj_DEGTORAD)
					local nx = newx * Cos(angle * bj_DEGTORAD) - newy * Sin(angle * bj_DEGTORAD) + x
					local ny = newx * Sin(angle * bj_DEGTORAD) + newy * Cos(angle * bj_DEGTORAD) + y
					BlzSetSpecialEffectPosition(eff, nx, ny, nz)
				end
			end
			print(k .. " всего Эффектов") --481
Загруженные файлы
0
15
4 года назад
0
Bergi_Bear, а зачем ты пытаешься повернуть сферу, если ты уже повернул эффект в нужную сторону?
Само по себе вращение сферы вокруг своей оси её, очевидно, не изменит.
0
32
4 года назад
0
LOR_D,разобрался, в этой теме всё хорошо
Чтобы оставить комментарий, пожалуйста, войдите на сайт.