Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Otto27
0 / 0 / 0
Регистрация: 05.08.2017
Сообщений: 2
1

Угол между двумя прямыми

06.08.2017, 20:06. Просмотров 482. Ответов 6

День добрый. Мне нужно сделать относительно простую программу. Суть ее заключается в следующем: мне даны 3 точки (т1, т2, т3). Из них я составляю два отрезка (о1, о2), но они "особенные". У этих двух отрезков есть одна общая точка, пусть это будет точка т1, помимо этого длины отрезков равны. Вот набросок:
Угол между двумя прямыми
. Моя цель - найти угол между этими двумя отрезками. Точки в пространстве, если что.
Вот что я набросал:
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
#include <stdio.h>
#include <math.h>
 
typedef struct{
float x, y, z;
} point;
 
// Создает вектор по двум точкам
void CreateVect(point A, point B, point *vect)
{
    vectr->x=B.x-A.x;
    vect->y=B.y-A.y;
    vect->z=B.z-A.z;
}
// Возвращает длину вектора
double VectLeng(point vect)
{
    return sqrt(pow(vect.x,2)+pow(vect.y,2)+pow(vect.z,2));
}
// Возвращает косинус между вектором А и вектором B
double angle(point A, point B)
{
    return (A.x*B.x+A.y*B.y+A.z*B.z)/(VectLeng(A)*VectLeng(B));
}
 
void main()
{
    point p1, p2, p3, o1, o2;
    scanf("%f%f%f",&p1.x,&p1.y,&p1.z);
    scanf("%f%f%f",&p2.x,&p2.y,&p2.z);
    scanf("%f%f%f",&p3.x,&p3.y,&p3.z);
    CreateVect(p1,p2,&o1);
    CreateVect(p1,p3,&o2);
    printf("%.3f",angle(o1,o2));
}
Вопрос: Правильно ли я все сделал, ничего не упустил, верна ли логика? Буду благодарен за советы/исправления/объяснения, если что-то не так.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2017, 20:06
Ответы с готовыми решениями:

Найти минимальное расстояние между прямыми
Имеется массив структур из 4000 элементов, в которых находятся координаты задающие прямую: ...

Угол между векторами
Даны два вектора: a=(x1,y1) b=(x2,y2) Написать функцию, которая высчитывает угол между векторами...

Угол между векторами
Написать программу, которая высчитывает угол между векторами a и b a=(x1,y1) b=(x2,y2)

Найти угол между векторами A(n) и B(n)
Нужна помощь с кодом в Си...Знайти кут між векторами A (n) і B (n), використовуючи формулу: Найти...

6
MansMI
1460 / 1168 / 551
Регистрация: 08.01.2012
Сообщений: 4,509
06.08.2017, 20:26 2
сомнительно без отрезка Т2Т3

Добавлено через 12 минут
acos((т2т32-т1т22-т1т32)/-2/т1т2/т1т3)
0
Otto27
0 / 0 / 0
Регистрация: 05.08.2017
Сообщений: 2
06.08.2017, 20:34  [ТС] 3
сомнительно без отрезка Т2Т3
Вы про то, что можно через эту формулу? cos(A)=b/2a, B=180-2A (A - угол при вершине, B - углы при основание, a - длины отрезков одинак.длины, b - длина основания получившегося треугольника).
0
Puporev
Модератор
59398 / 44825 / 30939
Регистрация: 18.05.2008
Сообщений: 107,543
06.08.2017, 20:40 4
Цитата Сообщение от Otto27 Посмотреть сообщение
цель - найти угол между этими двумя отрезками
Цитата Сообщение от Otto27 Посмотреть сообщение
ничего не упустил,
Практически ничего кроме нахождения угла.
0
Evg
Эксперт CАвтор FAQ
21090 / 8107 / 628
Регистрация: 30.03.2009
Сообщений: 22,440
Записей в блоге: 30
07.08.2017, 10:19 5
Косинус угла между двумя единичными векторам - это скалярное произведение векторов. Т.е. нужно вектора t1-t2 и t1-t3 привести к единичному виду, вычислить скалярное произведение и взять от этого арккосинус. Размерность пространства роли не играет
1
Puporev
Модератор
59398 / 44825 / 30939
Регистрация: 18.05.2008
Сообщений: 107,543
07.08.2017, 10:30 6
Цитата Сообщение от Evg Посмотреть сообщение
Косинус угла между двумя единичными векторам - это скалярное произведение векторов.
А разве не скалярное произведение деленное на произведение их модулей?
0
Evg
Эксперт CАвтор FAQ
21090 / 8107 / 628
Регистрация: 30.03.2009
Сообщений: 22,440
Записей в блоге: 30
07.08.2017, 15:34 7
Когда векторы приведены к единичному виду, то вычисление косинуса угла между ними есть банальная операция вычисления скалярного произведение. При работе с графикой так обычно и делают, поскольку скалярное произведение векторов - это быстрое действие из операций умножения и сложения

Добавлено через 53 секунды
Вероятно, я тут неправильным терминам выразился. Под "единичным вектором" я подразумевал вектор, длина которого равна единице

Добавлено через 22 секунды
Вспомнил. Правильно "нормированный", а не "единичный"
0
07.08.2017, 15:34
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2017, 15:34

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

Угол между двумя прямыми
Вычислить: a)угол между двумя прямыми y=1 и y+2x-2=0. б) расстояние от точки А, лежащей на первой...

Найти угол между двумя прямыми
13. Пересекающиеся прямые. Заданы уравнения двух пересекающихся прямых на плоскости: у = k1+b1;...

Найти угол между двумя прямыми
Всем привет! Подскажите, как найти угол между двумя прямыми на плоскости, зная только координаты...

Найти угол между двумя прямыми
Нужно найти угол между двумя прямыми, при условии что заданы координаты точек прямых....


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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