Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
No10
30 / 28 / 2
Регистрация: 03.06.2010
Сообщений: 465
#1

Произведение векторов - C++

14.01.2013, 22:22. Просмотров 400. Ответов 4
Метки нет (Все метки)

Вот написал функцию которая должа умножать вектора(находить нормаль):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
 
using namespace std;
 
class TVector
{
    friend TVector ABVec(TVector, TVector);
 
    public:
 
    TVector(float _x, float _y, float _z)
    {
        x = _x;
        y = _y;
        z = _z;
    }
 
    void print(void) {std::cout << "(" << x << ", " << y << ", " << z << ")";}
 
    private:
 
    float x;
    float y;
    float z;
};
 
TVector ABVec(TVector a, TVector b) //считаем
{
    return TVector(a.z * b.y - a.y * b.z,
                   a.x * b.z - a.z * b.x,
                   a.y * b.x - a.x * b.y);
}
 
int main()
{
    TVector v1(50, 0, 0);
    TVector v2(0, 0, 50);
    ABVec(v1, v2).print();
    return 0;
}
Но один минус, вектор должен быть ЕДИНИЧНЫМ, так сказано и в википедии,
если он единичные значит его длина равна 1.
Но почему у меня в ответе вектор длиной (0,2500,0)
Вроде он должен быть длиной вверх всего 1, тоесть (0, 1, 0).
Скажите в чём моя ошибка и что я не понял?

Добавлено через 3 минуты
Меня реально подкосили знания математики, пишу программы легко, но вот математика... с пониманием проблема. Надеюсь на вашу помощь, я и так заплутал в учебниках по Стереометрии.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2013, 22:22     Произведение векторов
Посмотрите здесь:

Вычислить произведение векторов - C++
Всем доброго времени суток! Нужно решить одну сложную (для меня) задачу на си. Завтра сдавать работу надо в универ, я все сделал кроме...

Векторное произведение векторов, в чем ошибка? - C++
векторное произведение векторов в чем ошибка? #include &lt;iostream&gt; using namespace std; int main(){ //Индексная переменная: int i;...

Скалярное произведение векторов - комплексное число - C++
Есть задание: Написать программу создания класса для реализации комплексных чисел. Предвидеть возможность сложения и вычитания...

Вычислить модули и скалярное произведение векторов - C++
Вычислить модули и скалярное произведение двух векторов a и b размерностью n=10. Премного благодарен, если поможете.

Вычислить скалярное произведение двух векторов - C++
7.6.1. Помогите, пожалуйста, решить задачу в С++. Вычислить скалярное произведение двух векторов.

Вычислить сумму, разность и скалярное произведение векторов - C++
Задать размерность задачи. Ввести два вектора. Вектора – динамические массивы. Вычислить сумму, разность и скалярное произведение. ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
1443 / 1172 / 61
Регистрация: 21.04.2012
Сообщений: 2,449
Завершенные тесты: 3
14.01.2013, 22:24     Произведение векторов #2
No10, я так понимаю вектора перед умножением надо нормализовать.
No10
30 / 28 / 2
Регистрация: 03.06.2010
Сообщений: 465
14.01.2013, 22:32  [ТС]     Произведение векторов #3
Я работал с формулой A*B = (Az*By - Ay*Bz, Ax*Bz - Az*Bx, Ay*Bx - Ax*By)

Добавлено через 2 минуты
ВОТ!!!
gray_fox, Нормализация, это что за процесс?
В OpenGL вроде нормализация векторов glEnable(GL_NORMALIZE);
или glEnable(GL_RESCALE_NORMALS);
Но я не знаю как в частности работают эти функции.

Добавлено через 3 минуты
ага, нормализация это когда вектора превращаются в единичные?
В моём случае
(50, 0, 0) = (1, 0, 0)
(0, 0, 50) = (0, 0, 1)

gray_fox, спасибо, прям глоток свежего воздуха дал
gray_fox
What a waste!
1443 / 1172 / 61
Регистрация: 21.04.2012
Сообщений: 2,449
Завершенные тесты: 3
14.01.2013, 22:35     Произведение векторов #4
Цитата Сообщение от No10 Посмотреть сообщение
gray_fox, Нормализация, это что за процесс?
Грубо говоря приведение к единичной длине.

Добавлено через 29 секунд
А ну ты сам уже понял)

Добавлено через 1 минуту
Что бы нормализовать - делишь каждую компоненту вектора на его длинну.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2013, 22:38     Произведение векторов
Еще ссылки по теме:

Найти скалярное произведение двух n-мерных векторов - C++
У меня вообще не понимаю. И ничего не получился! Задача СИ : Написать программу, которая находит скалярное произведение двух n-мерных...

Как одновременно декларировать векторное и скалярное произведение векторов? - C++
В обоих случаях умножается вектор на вектор. Нельзя же перегрузить по типу значения.

ОпенМП расспаралелить скалярное произведение двух n-мерных векторов (массивов) - C++
Существует следующий код int main() { setlocale(LC_ALL, &quot;Russian&quot;); size_t n; cout &lt;&lt; &quot;Введите размерность...

Найти пару векторов из заданного набора имеющую минимальное скалярное произведение - C++
Даны p различных векторов одинаковой размерности N: a^((1))={〖a^((1))〗_n }= , и a^((2))={〖a^((2))〗_n }=,..,a^((p))={〖a^((p))〗_n...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Igor3D
943 / 476 / 43
Регистрация: 01.10.2012
Сообщений: 2,362
14.01.2013, 22:38     Произведение векторов #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
TVector Cross( const TVector & a, const TVector & b ) 
{
    return TVector(a.y * b.z - a.z * b.y,
                   a.z * b.x - a.х * b.z,
                   a.x * b.y - a.y * b.x);
}
 
float TVector::Length( void ) const
{
 return sqrt(x * x + y * y + z * z);
}
 
TVector TVector::Normalized( void ) const
{
 float len = Length();
 return TVector(x / len, y / len, z / len);
}
Yandex
Объявления
14.01.2013, 22:38     Произведение векторов
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru