Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.09.19;
Скачать: CL | DM;

Вниз

Помогите решить, плиз?   Найти похожие ветки 

 
AKE   (2010-06-24 23:28) [0]

Есть плоскость Ax+By+Cz + D = 0
Есть вектор {i, j, k}, лежащий в плоскости
Как найти вектор {a, b, c}, перпендикулярный вектору
{i, j, k} и тоже лежащий в плоскости...


 
Rouse_ ©   (2010-06-24 23:30) [1]

На асме решение пойдет? :)


 
AKE   (2010-06-24 23:32) [2]

Rouse_ ©   (24.06.10 23:30) [1]
Нет лучше на Си.
Я вот кое что набрасал. Возможно функцию за денежку некоторую...
#include "math.h"

struct T3DPoint{
double x;
double y;
double z;
};

struct Vector{
double i;
double j;
double k;
};
//Plane - coeffs of plane Ax+By+Cz+D=0
struct Plane{
 double A;
 double B;
 double C;
 double D;
};
Plane GetPlane(T3DPoint P1, T3DPoint P2, T3DPoint P3)
{

 double A1 = (P2.y - P1.y)*(P3.z - P1.z)-(P3.y - P1.y)*(P2.z - P1.z);
 double A2 = (P2.x - P1.x)*(P3.z - P1.z)-(P3.x - P1.x)*(P2.z - P1.z);
 double A3 = (P2.x - P1.x)*(P3.y - P1.y)-(P3.x - P1.x)*(P2.y - P1.y);
 Plane P;
 P.A = A1;
 P.B = -A2;
 P.C = A3;
 P.D = -P1.x*A1+P1.y*A2-P1.z*A3;
 return P;
}

T3DPoint SetPoint(double x, double y, double z)
{
T3DPoint P;
P.x = x;
P.y = y;
P.z = z;
return P;
}

Vector SetVector(double i, double j, double k)
{
Vector V;
V.i = i;
V.j = j;
V.k = k;
return V;
}


 
AKE   (2010-06-24 23:33) [3]

//Normal vector to one vector, both lie in Plane
Vector NormalVectorInPlane(Plane P, Vector v)
{
 Vector V;
 double a = v.i;
 double b = v.j;
 double c = v.k;
 double A = P.A;
 double B = P.B;
 double C = P.C;
 double K1 = -a;
 double K2 = -A;
 V.i = 1;
 if (B == 0)
 {
if (C != 0)
{
  V.k = - A/C;
  if (b != 0)
  {
  V.j = (K1-V.k*c)/b;
  } else
  {
  V.j = 1;
  }
} else
{

}
 }
   else
{
     if ((C*B-b*C) != 0)
  {
 V.k = (K1*B - K2*b)/(C*B - b*C);
  } else
  {
       V.k = 1;
 if (b == 0)
 {
   V.j = 1;
 } else
 {
   V.j = (K1 - C)/b;
 }
  }
}
return V;
}


 
AKE   (2010-06-24 23:33) [4]

Только работает не правильно...


 
Rouse_ ©   (2010-06-24 23:34) [5]

Ну студии у меня дома нема...


 
AKE   (2010-06-24 23:36) [6]

Rouse_ ©   (24.06.10 23:34) [5]
Ну студии у меня дома нема...

Спасибо за ответ


 
AKE   (2010-06-24 23:37) [7]

Rouse_ ©   (24.06.10 23:34) [5]
А может и на паскале?


 
Rouse_ ©   (2010-06-24 23:39) [8]

Да я ж писать то вечером не собираюсь :)
так просто валялась где-то подборка математики на асме с алголиба (как-то так сайт назывался)


 
turbouser ©   (2010-06-24 23:42) [9]

algolist.manual.ru


 
AKE   (2010-06-24 23:42) [10]

Rouse_ ©   (24.06.10 23:39) [8]
С асмом разбираться лень, но если
не жалко может кинешь?


 
RWolf ©   (2010-06-24 23:44) [11]

все три вектора друг другу перпендикулярны — значит, любой из них находится векторным произведением двух остальных, с точностью до знака.
речь о векторах длины 1, конечно.


 
AKE   (2010-06-24 23:55) [12]

RWolf ©   (24.06.10 23:44) [11]
То есть
{A,B,C}*{i, j, k} получиться искомый вектор?


 
RWolf ©   (2010-06-24 23:57) [13]


> AKE   (24.06.10 23:55) [12]

ага; а с минусом будет ещё один.


 
AKE   (2010-06-24 23:58) [14]

RWolf ©   (24.06.10 23:57) [13]
Спасибо огромное...


 
AKE   (2010-06-25 00:19) [15]

Вот что получилось

Vector NormalVectorInPlane(Plane P, Vector v)
{
 Vector V;
 double a1 = v.i;
 double a2 = v.j;
 double a3 = v.k;
 double b1 = P.A;
 double b2 = P.B;
 double b3 = P.C;
 V.i = a2*b3 - b2*a3;
 V.j = b1*a3 - a1*b3;
 V.k = a1*b2 - b1*a2;
 return V;
}


 
Ega23 ©   (2010-06-25 00:58) [16]

1. Берёшь нормаль к плоскости.
2. Перемножаешь (векторно!) с исходным вектором.
3. Получаешь искомый.
4. Умножаешь на -1, получаешь второй искомый.
5. .....
6. PROFIT!


 
AKE   (2010-06-25 01:20) [17]

Ega23 ©   (25.06.10 00:58) [16]
Спасибо, это уже было разобрано ранее...



Страницы: 1 вся ветка

Текущий архив: 2010.09.19;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.007 c
15-1277226885
Who_is_you?
2010-06-22 21:14
2010.09.19
Как добавить новый компонент


15-1277470736
12
2010-06-25 16:58
2010.09.19
Киньтесь ссылкой на архив иконок


11-1222972796
Rocket
2008-10-02 22:39
2010.09.19
Утечка памяти при динамическом создании форм и UNICODE_CTRLS


2-1277246482
Отшельник
2010-06-23 02:41
2010.09.19
Как узнать, подключена ли другая программа к серверу?


2-1277139245
Великий
2010-06-21 20:54
2010.09.19
Под вистой не отображается label