170 похожих чатов

Привет , помогите оч нужно Закинули задачу поворота вектора в 3D

пространстве вокруг произвольной оси
Есть сайт который проверяет задачи , там 13 проверок , я сделал задание , но что бы я не делал больше 4 балов не набирал(
Может кто помочь?

18 ответов

10 просмотров

Нормальную формулировку задания и ваш код бы

Breathe- Автор вопроса
смкх
Нормальную формулировку задания и ваш код бы

Не вопрос , думал просто тут не заваливать чат , сейчас сброшу

Breathe- Автор вопроса

Description Rotate a vector around an axis in 3D space. Input: Ten reals: 1.      The 3D coordinates of the vector. 2.      The rotation angle in radians. 3.      The 3D coordinates of a point of the axis. 4.      The 3D coordinates of the direction vector of the axis. The length of the direction vector is greater than 1e-8. Output: Three reals, the 3D coordinates of the vector after its rotation. #include <iostream> #include <vector> #include <iomanip> #include <cmath> struct Vector { double x; double y; double z; void normalize() { double vectorLenght = std::sqrt(std::pow(x, 2) + std::pow(y, 2) + std::pow(z, 2)); x /= vectorLenght; y /= vectorLenght; z /= vectorLenght; } Vector& operator+ (const Vector& rhs) const { Vector res; res.x = rhs.x + this->x; res.y = rhs.y + this->y; res.z = rhs.z + this->z; return res; } Vector& operator- (const Vector& rhs) const { Vector res; res.x = this->x - rhs.x; res.y = this->y - rhs.y; res.z = this->z - rhs.z; return res; } Vector& operator* (const double& rhs) const { Vector res; res.x = this->x * rhs; res.y = this->y * rhs; res.z = this->z * rhs; return res; } friend std::ostream& operator<< (std::ostream& out, const Vector& v); }; std::ostream& operator<< (std::ostream& out, const Vector& v) { out << std::setprecision(8) << std::fixed << v.x << " " << v.y << " " << v.z; return out; } void rotate(Vector& rotate, Vector& point, Vector direction, double angle) { direction.normalize(); // change origin Vector shifted = rotate - point; // rotate vector around x by alpha double d = std::sqrt(std::pow(direction.y, 2) + std::pow(direction.z, 2)); double sina = 0; double cosa = 1; if (d != 0) { sina = direction.y / d; cosa = direction.z / d; } Vector rotx; rotx.x = shifted.x; rotx.y = shifted.y * cosa - shifted.z * sina; rotx.z = shifted.y * sina + shifted.z * cosa; // rotate vector around y by beta double cosb = d; double sinb = direction.x; Vector roty; roty.x = rotx.x * cosb - rotx.z * sinb; roty.y = rotx.y; roty.z = rotx.x * sinb + rotx.z * cosb; // rotate vector by angle double cosd = std::cos(angle); double sind = std::sin(angle); Vector rotz; rotz.x = roty.x * cosd - roty.y * sind; rotz.y = roty.x * sind + roty.y * cosd; rotz.z = roty.z; // rotate around y by - beta roty.x = rotz.x * cosb + rotz.z * sinb; roty.y = rotz.y; roty.z = -rotz.x * sinb + rotz.z * cosb; //rotate around x bu - alpha rotx.x = roty.x; rotx.y = roty.y * cosa + roty.z * sina; rotx.z = -roty.y * sina + roty.z * cosa; // shift it back rotate = rotx + point; } int main() { Vector v; // input vector std::cin >> v.x >> v.y >> v.z; // input rotation angle double angle; std::cin >> angle; // input axis point Vector axisPoint; std::cin >> axisPoint.x >> axisPoint.y >> axisPoint.z; // input axis direction Vector direction; std::cin >> direction.x >> direction.y >> direction.z; rotate(v, axisPoint, direction, angle); std::cout << v; }

Breathe
Description Rotate a vector around an axis in 3D ...

Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

в задаче нужно самому с нуля описать вращение? или можно использовать существующие библиотеки?

Breathe- Автор вопроса
Andrei Tokmakov
в задаче нужно самому с нуля описать вращение? или...

Условий нет , просто главное сделать и учитывать что сайт любит засекать время и писать на проверку timed out

Breathe- Автор вопроса
Andrei Tokmakov
в задаче нужно самому с нуля описать вращение? или...

Я уже 8 раз пробовал сдать вплоть то кардинального изменения кода , постоянно где-то ошибка

А конкретно проблема в чём ? Без этого трудно будет...

Breathe- Автор вопроса
Ilya Zviagin
А конкретно проблема в чём ? Без этого трудно буде...

Понимаю , но проверки спрятаны и я сам знать не знаю(

Breathe- Автор вопроса
Breathe
Понимаю , но проверки спрятаны и я сам знать не зн...

Тогда шансов практически ноль, я думаю тебе надо начать писать свои проверки... То есть тесты.

Breathe- Автор вопроса

Спасибо , сейчас попробую

Breathe
Спасибо , сейчас попробую

а. пардон, я проморгал код выше

Breathe
Я уже 8 раз пробовал сдать вплоть то кардинального...

Пиши тесты. Также, я думаю, такой "прямвлоб" подход не будет работать, у тебя же могут быть не заданы какие-то элементы вращения, а ты на них всегда "домножаешь" - вносит лишнюю ошибку. И вот это: // input rotation angle double angle; std::cin >> angle; что это? почему одно число?

Breathe
Угол поворота

У тебя даже в функции это вектор

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта