Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.89
kiberg
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 8
#1

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

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

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

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

(Я делаю на Builder 6, С++ на консоли)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2011, 23:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти проекцию точки на прямую (С++) (C++):

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

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

Найти координаты всех пикселей образующих прямую - C++
день добрый, выручайте кто чем может есть координаты 2точек x1,y1 x2,y2 строю прямую MoveTo(x1,y1); LineTo(x2,y2); теперь для...

Найти такую прямую, по разные стороны от которой лежат по N/2 точек - C++
Помогите написать программу: Матрица N*2 задаёт координаты N точек плоскости (N-чётное число). Найти такую прямую, по разные стороны от...

Найти точки пересечения прямых проходящих через заданные точки - C++
Всем привет! Прошу помощи в решении задачи: Дана система координат X:Y (по 25 точек в каждую сторону) В ней расположен ряд точек в...

Как найти координаты точки на прямой удаленной от заданной точки на х - C++
Добрый день! Помогите мне пожалуйста со следующей задачей. Дано 3 точки с координатами A(x1,y1), B(x2,y2), C(x3,y3) Нужно найти...

8
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.01.2011, 23:42 #2
покажите ваши нароботки
Создать заголовочный файл, содержащий определения структур, описывающих следующие геометрические объекты: 1.) точку на плоскости,
0
Day
1159 / 964 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
05.01.2011, 23:50 #3
Цитата Сообщение от kiberg Посмотреть сообщение
1.) точку на плоскости
- POINT
2) Опять POINT.
3) А тут уже RECT (точка + вектор)
0
kiberg
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 8
06.01.2011, 00:36  [ТС] #4
Цитата Сообщение от Maxwe11 Посмотреть сообщение
покажите ваши нароботки
В этом то и проблема, это совершенно новое для меня. Может кто-нибудь покажет как создать заголовочный файл содержащий определение структуры описывающей например точку на плоскости или прямую на плоскости. Дальше я сам скорее всего разберусь.
0
asics
Freelance
Эксперт С++
2850 / 1785 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
06.01.2011, 00:51 #5
Структура - точка в 2D пространстве
C
1
2
3
4
5
struct point
{
   double x,
   y;
};
1
kiberg
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
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
06.01.2011, 15:11 #7
Цитата Сообщение от kiberg Посмотреть сообщение
А прямую на плоскости как тогда сделать?
наверное надо задать уравнение прямой или координаты точек на данной прямой
если не изменяет память то, любая прямая на плоскости может быть задана уравнением первого порядка. Ах + Ву + С = 0
1
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
06.01.2011, 15:24 #8
для начала стоит прочесть учебник математики
Если задана точка М(х0, у0), то расстояние до прямой Ах + Ву + С =0 определяется как
0
Изображения
 
kiberg
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 8
07.01.2011, 16:50  [ТС] #9
Цитата Сообщение от kiberg Посмотреть сообщение
Задание :
Создать заголовочный файл, содержащий определения структур, описывающих следующие геометрические объекты: 1.) точку на плоскости, 2.) вектор на плоскости (в моём варианте это не понадобится), 3.) прямую на плоскости. С помощью этих структур найти проекцию точки на прямую.
Пример как находить проекцию точки на прямую здесь: http://www.neive.by.ru/geometriia/praktika/zadatcha5.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
07.01.2011, 16:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2011, 16:50
Привет! Вот еще темы с ответами:

Массив, заполненный 1 и 0. Найти путь, состоящий из нулей, от точки до точки. - C++
Доброго времени суток всем! Вот такая задача, ничего не могу даже сообразить по ней, подкиньте идеи, пожалуйста (ну или код в C++ )

Найти координаты самой низкой точки траектории и другой наивысшей точки подъема - C++
помогите решить пожуйста очень надо...не используя некакие циклы и ветвленее..они тока на алгоритмы линейные задачки 1.Заданы...

Дана точка A и множество B из N точек. Найти номер точки из множества B, наиболее удаленной от точки A - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;time.h&gt; #define B 100 using namespace std; void gen...

Найти самый короткий путь от точки до точки в матрице - C++
Народ, помогите... Такая задача, имеется массив символов(char arr) в котором в рандомных местах установлены препятствия(к примеру символы...


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

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

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