Главная страница
    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.005 c
8-1205857317
siv
2008-03-18 19:21
2010.09.19
Всем привет! Люди, помогите пропикать системному спикеру из Delph


15-1277349628
ixen
2010-06-24 07:20
2010.09.19
Не запускается программа. В чем может быть причина?


2-1277184150
Seally
2010-06-22 09:22
2010.09.19
проблема с AdvStringGrid 2.0 в delphi 5


2-1277122422
nobody
2010-06-21 16:13
2010.09.19
Выполнение запросов в потоке, с использованием DOA


2-1277491678
New555
2010-06-25 22:47
2010.09.19
if Key = VK_F1 then





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский