mahsus
Новичок
|
Цель: создать простую 3D-сцену, которой можно управлять двумя углами beta и gamma. Есть плоскость, проходящая через начало координат. Эта плоскость наклонена к плоскости xy под углом beta. Если провести в этой плоскости перпендикуляр к прямой пересечения нашей плоскости с плоскостью xy, который проходит через начало координат, то угол между этим перпендикуляром и его проекцией на плоскость xy будет beta, а угол между проекцией перпендикуляра и осью x будет gamma. Т.е. по сути угол beta - это угол поворота плоскости относительно начала координат, а угол gamma - это угол поворота плоскости в плоскости xy относительно оси x. Таким образом есть плоскость, которую можно описать в полярных координатах растоянием до любой точки на плоскости и двумя углами alfa и beta. Если взять сферу радиуса R, центр которой лежит в начале координат, то можно найти пересечение нашей плоскости и сферы. Это будет окружность, которая наклонена к плоскости xy и этот наклон описывается двумя углами beta и gamma. Эти угла задаются при прорисовке сцены. Фактически нужно получить проекцию окружности на плоскость xy. это будет некий эллипс. Есть угол alfa, который будем динамически изменяться для определения положения точки на окружности (в плоскости xy относительно оси x), например, приращением угла в 3 градуса. Таким образом нужно получить уравнение проекции окружности на плоскость xy как x(R,alfa,beta,gamma) и y(R,alfa,beta,gamma), как в полярных координатах, чтобы можно было отображать на экране координаты x и y, изменять динамически угол alfa, а вращать сцену двумя углами beta и gamma. Пробовал решать таким путем: уравнение сферы: x^2+y^2+z^2=R и прямая, проходящая через начало координат: Ax+By+Cz+D=0, D = 0 т.е. Ax+By+Cz=0 находим пересечение этих поверхностей и убираем ось z для получения проекции на ось xy: получаем путем подстановок: x^2*(C^2+A^2) + 2*A*x*B*y + y^2(C^2+B^2) - R^2*C^2 = 0 из этого уравнения выражаем x через y и наоборот, подставляя вместо x и y такие выражения: x = R*cos(beta)*cos(gamma) y = R*cos(beta)*sin(gamma) подстановка коэффициентов A,B,C: A = tg(sigma) = z/y B = tg(tetta) = z/x C = tg(alfa), что известно. Так как нам нужна проекция, то z = 0 Получаем: x^2*tg(alfa)^2 + y^2*tg(alfa)^2 - R^2*tg(alfa)^2 = 0 после подстановки x и y получаем такие расчетные формулы: x = R*tg(alfa)*sqrt(1-cos(beta)^2*sin(gamma)^2) y = R*tg(alfa)*sqrt(1-cos(beta)^2*cos(gamma)^2) Ну естественно по этим формулам по эллипсу ничего не движется, а движется по прямой под углом 45 градусов. Помогите найти ошибку в расчетах. Если направление координально не правильное, подскажите пожалуйста направление к решению задания. Заранее благодарен.
|