Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/40: Рейтинг темы: голосов - 40, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 8
1

Найти проекцию точки на прямую (С++)

05.01.2011, 23:38. Просмотров 7742. Ответов 8
Метки нет (Все метки)

Скоро курсач сдавать, в одном задании не успеваю разобраться как делать.
Задание такое:
Создать заголовочный файл, содержащий определения структур, описывающих следующие геометрические объекты: 1.) точку на плоскости, 2.) вектор на плоскости (в моём варианте это походу не понадобится), 3.) прямую на плоскости. С помощью этих структур найти проекцию точки на прямую.

Вроде должно быть быстро, поможите?

(Я делаю на Builder 6, С++ на консоли)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.01.2011, 23:38
Ответы с готовыми решениями:

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

Перпендикуляр из точки на прямую
Привет. Прямая задана двумя точками (x1,y1) (x2,y2). Есть третья точка (x3,y3). Из точки нужно...

Найти проекцию точки М(1,1,1) на прямую проходящую через точки М1(2,5,-3) и М2 (3,-2,2).
Найти проекцию точки М(1,1,1) на прямую проходящую через точки М1(2,5,-3) и М2 (3,-2,2).

Найти проекцию точки на прямую
Найти проекцию точки P(5;6;-9) на прямую \frac{x-1}{2}=\frac{y+1}{1}=\frac{z}{1} меня эти дроби...

8
Каратель
Эксперт С++
6598 / 4019 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
05.01.2011, 23:42 2
покажите ваши нароботки
Создать заголовочный файл, содержащий определения структур, описывающих следующие геометрические объекты: 1.) точку на плоскости,
0
Day
1171 / 981 / 83
Регистрация: 29.10.2009
Сообщений: 1,386
05.01.2011, 23:50 3
Цитата Сообщение от kiberg Посмотреть сообщение
1.) точку на плоскости
- POINT
2) Опять POINT.
3) А тут уже RECT (точка + вектор)
0
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 8
06.01.2011, 00:36  [ТС] 4
Цитата Сообщение от Maxwe11 Посмотреть сообщение
покажите ваши нароботки
В этом то и проблема, это совершенно новое для меня. Может кто-нибудь покажет как создать заголовочный файл содержащий определение структуры описывающей например точку на плоскости или прямую на плоскости. Дальше я сам скорее всего разберусь.
0
Freelance
Эксперт С++
2876 / 1811 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
06.01.2011, 00:51 5
Структура - точка в 2D пространстве
C
1
2
3
4
5
struct point
{
   double x,
   y;
};
1
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 8
06.01.2011, 14:46  [ТС] 6
Цитата Сообщение от asics Посмотреть сообщение
Структура - точка в 2D пространстве
C
1
2
3
4
5
struct point
{
   double x,
   y;
};
А заголовочный файл тогда так будет? :
C++
1
2
3
4
5
6
7
/* файл struct.h: */
#pragma once
struct point
{
   double x,
   y;
};
А прямую на плоскости как тогда сделать?
0
598 / 566 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
06.01.2011, 15:11 7
Цитата Сообщение от kiberg Посмотреть сообщение
А прямую на плоскости как тогда сделать?
наверное надо задать уравнение прямой или координаты точек на данной прямой
если не изменяет память то, любая прямая на плоскости может быть задана уравнением первого порядка. Ах + Ву + С = 0
1
598 / 566 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
06.01.2011, 15:24 8
для начала стоит прочесть учебник математики
Если задана точка М(х0, у0), то расстояние до прямой Ах + Ву + С =0 определяется как
0
Изображения
 
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 8
07.01.2011, 16:50  [ТС] 9
Цитата Сообщение от kiberg Посмотреть сообщение
Задание :
Создать заголовочный файл, содержащий определения структур, описывающих следующие геометрические объекты: 1.) точку на плоскости, 2.) вектор на плоскости (в моём варианте это не понадобится), 3.) прямую на плоскости. С помощью этих структур найти проекцию точки на прямую.
Пример как находить проекцию точки на прямую здесь: http://www.neive.by.ru/geometr... tcha5.html или здесь:

Я сделал, вроде всё работает. Посмотрите нормально или можно как-то короче сделать:
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/* файл struct.h: */
#pragma once
 
struct Point2D
{
   double x, y;
};
 
struct Line2D
{
   double x, y;
   double A, B, C;
};
 
 
/* файл Unit1.cpp: */
#include <vcl.h>
#include <iostream.h>
#include <conio.h>
#include "struct.h"
 
 
int main()
{
Point2D point;
Line2D line;
 
cout << "Zadayte koordinaty tochki (x, y)\n";
cout << "Vvedite x koordinatu tochki ";
cin >> point.x;
cout << "Vvedite y koordinatu tochki ";
cin >> point.y;
cout << "Zadayte koefficienty v uravnenii pryamoy A*x + B*y + C = 0\n";
cout << "Vvedite A koefficient pryamoy ";
cin >> line.A;
cout << "Vvedite B koefficient pryamoy ";
cin >> line.B;
cout << "Vvedite C koefficient pryamoy ";
cin >> line.C;
 
//ïðîâåðÿåì ÷òî îáà êîýô. â óð-èè ïðÿìîé íå=0
if ((line.A == 0) && (line.B == 0))
  {
  cout << "Nekorrektniy vvod";
  getch();
  return 0;
  }
 
double M, N, L;
double b;
 
//ñëó÷àé åñëè êîýôôèöèåíò ïðè x=0 èëè îáà êîýôôèöèåíòà íå=0 (ò.å. íîðìàëüíûé ñëó÷àé)
if( line.A == 0 || ((line.A != 0) && (line.B != 0)) )
{
 
//line.y = -M*line.x - L; - Âûðàçèì ó â óðàâíåíèè ïðÿìîé, ãäå M = (line.A / line.B);
//Òåîðåìà. Ïóñòü äàíû äâå ïðÿìûå  a è b è èçâåñòíû èõ óðàâíåíèÿ ó=kx+b è y2=k2x+b2.
//         È åñëè ïðÿìûå a è b ïåðïåíäèêóëÿðíû, òî k = -1 / k2
 
// â ñëó÷àå åñëè êîýô. ïðè õ=0, òî N=0
if (line.A == 0)
  N = 0; //ò.ê. N = (line.B / line.A) = 0
else
  N = (line.B / line.A);
 
  M = (line.A / line.B);
  L = (line.C / line.B);
 
//ïîäñòàâëÿåì êîîðäèíàòû òî÷êè âî 2-îå óð-èå è íàõîäèì êîýô. b
//line.y2 =  N*line.x + b
b = point.y - N*point.x;
 
//èç 2-óõ ïîëó÷åííûõ óð-èé íàõîäèì x è y - ýòî êîîðäèíàòû ïðîåêöèè
//ïðèðàâíèâàåì ïðàâûå ÷àñòè óð-èé: line.y = -M*line.x - L  è  line.y =  N*line.x + b
//N*line.x + b + M*line.x + L = 0
//(N + M)*line.x = - L - b
//òîãäà line.x = (- L - b) / (N + M)
if((N + M) == 0)
  line.x = point.x;
else
  line.x = (- L - b) / (N + M);
 
line.y = -M*line.x - L;
}
 
 
//ñëó÷àé åñëè êîýôôèöèåíò ïðè y = 0
if( line.B == 0 )
{
 
//line.x = -M*line.y - L; - Âûðàçèì x â óðàâíåíèè ïðÿìîé, ãäå M = (line.B / line.A)
//Òåîðåìà. Ïóñòü äàíû äâå ïðÿìûå  a è b è èçâåñòíû èõ óðàâíåíèÿ x=ky+b è x2=k2y+b2.
//         È åñëè ïðÿìûå a è b ïåðïåíäèêóëÿðíû, òî k = -1 / k2
 
  N = 0; //ò.ê. N = (line.A / line.B) = 0
  M = 0; //ò.ê. M = (line.B / line.A) = 0
  L = (line.C / line.A);
 
//ïîäñòàâëÿåì êîîðäèíàòû òî÷êè âî 2-îå óð-èå è íàõîäèì êîýô. b
//line.x2 =  N*line.x + b
b = point.y - N*point.x;
 
//èç 2-óõ ïîëó÷åííûõ óð-èé íàõîäèì x è y - ýòî êîîðäèíàòû ïðîåêöèè
//ïðèðàâíèâàåì ïðàâûå ÷àñòè óð-èé: line.x = -M*line.y - L  è  line.x =  N*line.y + b
//N*line.y + b + M*line.y + L = 0
//(N + M)*line.y = - L - b
//òîãäà line.y = (- L - b) / (N + M)
if((N + M) == 0)
  line.y = point.y;
else
  line.y = (- L - b) / (N + M);
 
line.x = -M*line.y - L;
}
 
cout << "\nProekciya tochki (" << point.x << ", " << point.y << ") " << "na pryamuyu " << line.A << "x";
if(line.B > 0) cout << "+";
cout << line.B << "y";
if(line.C > 0) cout << "+";
cout << line.C << "=0 - (" << line.x << ", " << line.y << ")";
 
getch();
return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.01.2011, 16:50

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

Найти проекцию точки на прямую
Найти проекцию точки Р(-5; 6) на прямую 7x-13y-105=0.

Найти проекцию точки на прямую
Дана точка М0 с координатами (5;6) и прямая l : 2x+5y+18=0 Нужно найти проекцию Р точки М0 на...

Найти проекцию точки А на прямую
A(2;-5;1) B(-1;0;2) D(1;-1;0) Была бы не трехмерная система... А так, я запуталась :D Помогите...

Найти проекцию точки на прямую
Найти проекцию точки А(1,0,-1) на прямую {x-y-2=0 { z=0 Я что-то весь учебник по...


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

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

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