Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.09.19;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




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


2-1277152731
Askalot
2010-06-22 00:38
2010.09.19
Тормоза


15-1276892998
Юрий
2010-06-19 00:29
2010.09.19
С днем рождения ! 19 июня 2010 суббота


15-1277316827
zlodey
2010-06-23 22:13
2010.09.19
песни про программистов


15-1277096188
tipman
2010-06-21 08:56
2010.09.19
Выпадающая таблица или таблица в ComboBox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский