... еще раз поясни на картинке ...... N - нормаль ...... A - приходящий луч ...... C - луч 1) перпендикулярный поверхности 2) не понятное условие ...
ЦитироватьSamovar, а как можно, например для контроля, получить углы в градусах куба и конуса в моём примере? Всё же измерение в градусах привычнее измерения в радианах, которое и представить-то для меня невозможно.я же давал ссылку на описание модуля math https://pythonworld.ru/moduli/modul-math.html
Samovar, а как можно, например для контроля, получить углы в градусах куба и конуса в моём примере? Всё же измерение в градусах привычнее измерения в радианах, которое и представить-то для меня невозможно.
ЦитироватьВ моём примере слежения если установить некий предел вращению куба, например 30 градусов, по достижению которого конус должен резко изменить свою направленность, т.е. развернуться по какой-то своей оси (например изменить направленность острия), на какой-то угол, то мне думается что потребуются не очень значительные изменения.создай условие if , но самостоятельно... если самостоятельно не пробовать, то понимания не возникнет...
В моём примере слежения если установить некий предел вращению куба, например 30 градусов, по достижению которого конус должен резко изменить свою направленность, т.е. развернуться по какой-то своей оси (например изменить направленность острия), на какой-то угол, то мне думается что потребуются не очень значительные изменения.
... пых, вот вроде получилось нормаль поверхности высчитать, попробуй это применит для исследования своего вопроса (файл во вложении) ...... на картинке сравнение "колоризации" нормалей ...
Кодimport bge # импортируем модуль BGEimport math # импортируем модуль Mathimport mathutils # импортируем модуль mathutilsscene = bge.logic.getCurrentScene() # получить текущую сценуobjList = scene.objects # получить список объектовcube = objList["Cube"] # получить объект Cube из objListcone = objList["Cone"] # получить объект Cone из objListd = 6p = cube.worldPosition # получить положение Cube в мире r = cube.worldOrientation # получить ориентацию Cube в мире e = r.to_euler()[2] # получить ориентацию Cube по оси Zgrad = math.degrees(e)ugol = 180rot = [0,0,math.radians(ugol)]cone.worldPosition = [p[0] - d*math.sin(e), p[1] + d*math.cos(e), p[2]]cone.worldOrientation = rif grad < 0 or grad > 30: cone.applyRotation(rot, True)Это то, что доктор прописал. Спасибо большое.Samovar, а как вы умудрились в коде выделить import, if и or? Я попытался в вашем коде выделить с помощью кнопок фрагменты, но у меня ничего не получилось.
import bge # импортируем модуль BGEimport math # импортируем модуль Mathimport mathutils # импортируем модуль mathutilsscene = bge.logic.getCurrentScene() # получить текущую сценуobjList = scene.objects # получить список объектовcube = objList["Cube"] # получить объект Cube из objListcone = objList["Cone"] # получить объект Cone из objListd = 6p = cube.worldPosition # получить положение Cube в мире r = cube.worldOrientation # получить ориентацию Cube в мире e = r.to_euler()[2] # получить ориентацию Cube по оси Zgrad = math.degrees(e)ugol = 180rot = [0,0,math.radians(ugol)]cone.worldPosition = [p[0] - d*math.sin(e), p[1] + d*math.cos(e), p[2]]cone.worldOrientation = rif grad < 0 or grad > 30: cone.applyRotation(rot, True)
>> Условие не проблема. Проблема в изменении ориентации конуса по какой-то другой оси с неким углом.... как раз наоборот, изменение ориентации - это математика, и тут ничего сложного нет ...... а вот условие (проработка последовательности принятия решений, алгоритм что делать) это проблема ...... опиши простым русским языком что и как должно действовать, типа - иду по коридору, стукнулся об косяк -> упал, отжался ...