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

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

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

18 ответов

13 просмотров

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

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
Угол поворота

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта