Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 19
1

Нужна подфункция для проверки принадлежности точки отрезку

18.11.2013, 13:02. Показов 1856. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день,нужна подфункция для проверки принадлежности точки отрезку на прямой отрезок задан 2 точками,значения хранятся в структуре vec в x1,y1,z1 и x2,y2,z2.Функция должна возвращать 1 или 0.Помогите с написанием на Си или хотя бы с формулой
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.11.2013, 13:02
Ответы с готовыми решениями:

Записать оператор условия для проверки принадлежности m заданному отрезку [20;30]
Записать оператор условия для проверки принадлежности m заданному отрезку

Программа для проверки принадлежности точки области
Сама область в прикрепленных файлах Вот код, который у меня получился. CLS INPUT "vvedite tochky...

Проверка принадлежности точки (х, у) отрезку АВ
Добрый день! // проверка принадлежности точки (х, у) отрезку АВ - проверка коллинеарности...

Составьте блок-схему и программу на языке VBA для проверки принадлежности точки плоскости
Помогите, пожалуйста, а то задали по информатике, а я ни бу бу в ВБА. задача такая: составьте ...

7
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
18.11.2013, 13:09 2
А что такое подфункция?
0
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 19
18.11.2013, 14:29  [ТС] 3
Ошибся))
Подпрограмму)
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
18.11.2013, 14:55 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Должны одновременно выполняться условия
C
1
2
3
4
5
(x-x1)*(y2-y1) == (y-y1)*(x2-x1)
(x-x1)*(z2-z1) == (z-z1)*(x2-x1)
(z-z1)*(y2-y1) == (y-y1)*(z2-z1)
(x1 <= x2 && x>=x1 && x<=x2) || (x1  >= x2 && x<=x1 && x >= x2)
//Аналогичные 2 условия по y, z
1
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
18.11.2013, 15:04 5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Ну так это другое дело.
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
struct vec
{
 float x1;
 float y1;
 float z1;
 float x2;
 float y2;
 float z2;
};
stuct point
{
 float x;
 float y;
 float z;
}
int check (vec v, point p)
{
 float kx;
 float ky;
 float kz; 
 float t;
 if (v.x2==v.x1)
 {
  kx=0.0f;
 }
 else
 {
  kx=1.0f/(v.x2-v.x1);
 }
 if (v.y2==v.y1)
 {
  ky=0.0f;
 }
 else
 {
  ky=1.0f/(v.y2-v.y1);
 }
 if (v.z2==v.z1)
 {
  kz=0.0f;
 }
 else
 {
  kz=1.0f/(v.z2-v.z1);
 }
 if ((v.x2==v.x1)&&(v.y2==v.y1)&&(v.z2==v.z1))
 {
  if ((p.x==v.x1)&&(p.y==v.y1)&&(p.z==v.z1))
  {
   return 1;
  }
  return 0;
 }
 if ((fabs(v.x2-v.x1)>=fabs(v.y2-v.y1))&&(fabs(v.x2-v.x1)>=fabs(v.z2-v.z1))
 {
  t=(p.x-v.x1)*kx;
  if (v.y2!=v.y1)
  {
   if (((p.y-v.y1)*ky)!=t)
   {
    return 0;
   }
  } 
  else
  {
   if (p.y!=v.y1)
   {
    return 0;
   }
  }
  if (v.z2!=v.z1)
  {
   if (((p.z-v.z1)*kz)!=t)
   {
    return 0;
   }
  } 
  else
  {
   if (p.z!=v.z1)
   {
    return 0;
   }
  }
  return 1;
 }
 if ((fabs(v.y2-v.y1)>=fabs(v.x2-v.x1))&&(fabs(v.y2-v.y1)>=fabs(v.z2-v.z1))
 {
  t=(p.y-v.y1)*ky;
  if (v.x2!=v.x1)
  {
   if (((p.x-v.x1)*kx)!=t)
   {
    return 0;
   }
  } 
  else
  {
   if (p.x!=v.x1)
   {
    return 0;
   }
  }
  if (v.z2!=v.z1)
  {
   if (((p.z-v.z1)*kz)!=t)
   {
    return 0;
   }
  } 
  else
  {
   if (p.z!=v.z1)
   {
    return 0;
   }
  }
  return 1;
 }
 t=(p.z-v.z1)*kz;
 if (v.x2!=v.x1)
 {
  if (((p.x-v.x1)*kx)!=t)
  {
   return 0;
  }
 } 
 else
 {
  if (p.x!=v.x1)
  {
   return 0;
  }
 }
 if (v.y2!=v.y1)
 {
  if (((p.y-v.y1)*ky)!=t)
  {
   return 0;
  }
 } 
 else
 {
  if (p.y!=v.y1)
  {
   return 0;
  }
 }
 return 1;
}
. Но здесь используются очень не точные сравнения на == и !=, действительные числа вообще не рекомендуется так сравнивать, для них надо задавать диапазон допустимого неравенства, так как точность действительных ограничена и это надо учитывать, но для отрезка иное сравнение не подходит, его толщина равна абсолютному нолю. С учётом ограниченной точности надо заменить отрезок полосой заданной толщины.
0
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 19
18.11.2013, 15:04  [ТС] 6
Цитата Сообщение от Байт Посмотреть сообщение
(x-x1)*(y2-y1) == (y-y1)*(x2-x1)
(x-x1)*(z2-z1) == (z-z1)*(x2-x1)
(z-z1)*(y2-y1) == (y-y1)*(z2-z1)
А x,y,z это координаты точки пересечения?
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
18.11.2013, 15:06 7
Цитата Сообщение от Байт Посмотреть сообщение
(x-x1)*(y2-y1) == (y-y1)*(x2-x1)
(x-x1)*(z2-z1) == (z-z1)*(x2-x1)
(z-z1)*(y2-y1) == (y-y1)*(z2-z1)
Странная пропорция. Из чего?

Добавлено через 28 секунд
Цитата Сообщение от diman_agresiv Посмотреть сообщение
А x,y,z это координаты точки пересечения?
А разве в задаче что то с чем то пересекается?
0
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 19
18.11.2013, 15:17  [ТС] 8
Цитата Сообщение от taras atavin Посмотреть сообщение
А разве в задаче что то с чем то пересекается?
Да это часть программы,сама программа должна выводить количество не пересекающихся отрезков в пространстве. По этому та точка о которой идет речь является точкой пересечения прямых на которых лежат отрезки

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int check (vec v, point p)
{
 float kx;
 float ky;
float kz; 
float t;
if (v.x2==v.x1)
{
 kx=0.0f;
}
else
{
 kx=1.0f/(v.x2-v.x1);
}
if (v.y2==v.y1)
{
 ky=0.0f;
А можете пояснить,я не очень понял
0
18.11.2013, 15:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.11.2013, 15:17
Помогаю со студенческими работами здесь

Алгоритм проверки принадлежности точки одному из прямоугольников
Задача такая - на холсте есть некоторое количество прямоугольников (больше 20), и нужно при...

Класс с методом проверки принадлежности точки заданной области
Создать класс, реализующий метод проверки принадлежности точки заданной области. Вот что у меня...

Какое условие проверки принадлежности точки к окружности, координаты центра которой произвольны?
Есть главная система координат. Выбираем любую точку. В этой точке центр нашей окружности. Далее...

Разработать программу для определения принадлежности точки графику функции
Точка плоскости с координатами x, y принадлежит графику функции y=x^3+0.5x+5.6 . Результат работы...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru