Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/47: Рейтинг темы: голосов - 47, средняя оценка - 4.55
1 / 1 / 4
Регистрация: 01.10.2016
Сообщений: 247
1

Написать программу, которая определяет, принадлежит ли точка с координатами (x, y) заштрихованной области D, и

13.10.2016, 19:40. Показов 9203. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написать программу, которая определяет, принадлежит ли точка с координатами (x, y) заштрихованной области D, изображенной на заданном рисунке.

помогите решить,хотя бы часть с формулами,ибо ни как не могу хотя бы основу извлечь,что бы строить программу.
Заранее спасибо!
Миниатюры
Написать программу, которая определяет, принадлежит ли точка с координатами (x, y) заштрихованной области D, и  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2016, 19:40
Ответы с готовыми решениями:

Написать программу, которая определяет, принадлежит ли точка с координатами (x, y) заштрихованной области
И вот тут я запутался....требуется помощь Написать программу, которая определяет, принадлежит ли...

Написать программу с ++, которая определяет, принадлежит ли точка с координатами (x, y) заштрихованной области
почти час голову ломаю уже,помогите

Написать программу, которая определяет, принадлежит ли точка с координатами (x, y) заштрихованной области D, изображенно
Написать программу, которая определяет, принадлежит ли точка с координатами (x, y) заштрихованной...

Написать программу, которая определяет, принадлежит ли точка с координатами (x, y) заштрихованной области D, изображенно
Написать программу, которая определяет, принадлежит ли точка с координатами (x, y) заштрихованной...

11
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
13.10.2016, 19:57 2
Ну условие, насколько я понял, должно быть примерно таким:
x <= 1 && y <= 1 && x >= -1 && y >= -1

Не по теме:


Эксперты в математике, если не прав, то поправьте, за лето уже всё забыл.

0
125 / 117 / 67
Регистрация: 07.11.2014
Сообщений: 788
13.10.2016, 20:17 3
abs(x)<=1 && abs(y)<=1
0
11 / 11 / 6
Регистрация: 10.06.2014
Сообщений: 21
13.10.2016, 20:22 4
Не совсем так. Данное условие помогает найти принадлежность точки к площади квадрата, который перекисает ось координат в точка (1,0), (0,1), (-1,0) и (0,-1). В случае же с ромбом нужен другой подход.

Теперь немного математики. Допустим есть уравнение прямой вида: Ах + Ву + С = 0. Если в его левую часть подставить координаты точка (х1, у1), то возможны три варианта исхода:
1) Ах1 + Ву1 + С > 0 - точка лежит выше прямой
2) Ах1 + Ву1 + С < 0 - точка лежит ниже прямой
3) Ах1 + Ву1 + С = 0 - точка лежит на прямой
Теперь возвращаемся к ромбу. Представим ромб, как 4 прямых линии, с уравнениями:
1. y = 1 -x
2. y = x + 1
3. y = -x -1
4. y = x - 1
Для того чтобы точка находилась на площади ромба, она должна лежать ниже прямых (или на них) (1) (2) и выше прямых (3) (4), при чём одновременно. Запишем эти четыре уравнения в виде: Ax + By + C = 0
1. -x - y + 1 = 0
2. x - y + 1 = 0
3. x + y + 1 = 0
4. x - y - 1 = 0

Теперь составим наше условие:
((-x - y + 1) <= 0) && ((x - y + 1) <= 0) && ((x + y + 1) >= 0) && ((x - y -1) >= 0)
2
Aymurat
13.10.2016, 20:25
  #5

Не по теме:

ошибся в элементарном :)

0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
13.10.2016, 21:20 6
Можно воспользоваться осевой симметрией фигуры
C++
1
2
3
x1 = (x<0) ? -x : x;
y1 = (y<0) ? -y : y;
if (x1 + y1 < 1)...
0
Вездепух
Эксперт CЭксперт С++
11693 / 6372 / 1723
Регистрация: 18.10.2014
Сообщений: 16,057
13.10.2016, 22:03 7
Цитата Сообщение от BenJost Посмотреть сообщение
принадлежит ли точка с координатами (x, y) заштрихованной области D
В заштрихованной фигуре, изображенной на рисунке, каждый школьник немедленно радостно узнает круг радиуса 1 в так называемой "манхэттенской" метрике L1. В метрике L1 расстояние между точками (ax, ay) и (bx, by) определяется формулой D = |ax - bx| + |ay - by|

Таким образом получаем формулу для решения задачи: точка (x, y) лежит в заштрихованной области, если L1-расстояние от точки до центра нашего L1-круга не превосходит его радиуса:

C++
1
2
3
4
if (std::abs(x) + std::abs(y) <= 1)
  /* Внутри */;
else
  /* Снаружи */;
3
GbaLog-
13.10.2016, 22:09
  #8

Не по теме:

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
каждый школьник немедленно радостно узнает круг радиуса 1 в так называемой "манхэттенской" метрике L1.
Не каждый, далеко не каждый. :(
До Вас ни разу не слышал об этом.
Даже обидно как-то. :cry:

0
1 / 1 / 4
Регистрация: 01.10.2016
Сообщений: 247
13.10.2016, 22:24  [ТС] 9
я правильно вас понял,ваш блок условия нужно занести именно так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h"
#include <iostream>
using namespace std;
 
 
int main ()
{
double x,y,; 
 
cout << "x= "; 
cin >> x; 
cout << "y= ";
cin >> y;  
 
 
if  ((-x - y + 1) <= 0)) && ((x - y + 1) <= 0) && ((x + y + 1) >= 0) && ((x - y -1) >= 0))
cout<<"yes"<<endl; 
else cout<<"no"<<endl; 
system("pause"); 
}
0
1 / 1 / 4
Регистрация: 01.10.2016
Сообщений: 247
13.10.2016, 22:44  [ТС] 10
Вот так,как вы указали блок условий,но выбивает постоянно "no"

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "stdafx.h"
#include <iostream>
using namespace std;
 
 
int main ()
{
double x,y; 
 
cout << "x= "; 
cin >> x; 
cout << "y= ";
cin >> y;  
 
 
if (((-x - y + 1) <= 0) && ((x - y + 1) <= 0) && ((x + y + 1) >= 0) && ((x - y -1) >= 0))
{ cout<<"yes"<<endl; }
else 
{
 cout<<"no"<<endl; 
}
system("pause"); 
}
Миниатюры
Написать программу, которая определяет, принадлежит ли точка с координатами (x, y) заштрихованной области D, и  
0
Вездепух
Эксперт CЭксперт С++
11693 / 6372 / 1723
Регистрация: 18.10.2014
Сообщений: 16,057
13.10.2016, 23:31 11
Цитата Сообщение от Hekaton Prime Посмотреть сообщение
Теперь немного математики. Допустим есть уравнение прямой вида: Ах + Ву + С = 0. Если в его левую часть подставить координаты точка (х1, у1), то возможны три варианта исхода:
1) Ах1 + Ву1 + С > 0 - точка лежит выше прямой
2) Ах1 + Ву1 + С < 0 - точка лежит ниже прямой
3) Ах1 + Ву1 + С = 0 - точка лежит на прямой
Нет. Это - не точное утверждение на тему "выше/ниже".

В уравнении прямой вида Ax + By + C = 0 коэффициенты A и B - это координаты вектора (A, B) нормали к прямой. Выражение Ax + By + C имеет положительное значение, если точка (x, y) лежит с той стороны от прямой, куда указывает вектор нормали (A, B), и отрицательное значение, если точка лежит с другой стороны. А не "выше/ниже".

Цитата Сообщение от Hekaton Prime Посмотреть сообщение
Теперь возвращаемся к ромбу. Представим ромб, как 4 прямых линии, с уравнениями:
1. y = 1 -x
2. y = x + 1
3. y = -x -1
4. y = x - 1

Для того чтобы точка находилась на площади ромба, она должна лежать ниже прямых (или на них) (1) (2) и выше прямых (3) (4), при чём одновременно. Запишем эти четыре уравнения в виде: Ax + By + C = 0
1. -x - y + 1 = 0
2. x - y + 1 = 0
3. x + y + 1 = 0
4. x - y - 1 = 0
Теперь составим наше условие:
((-x - y + 1) <= 0) && ((x - y + 1) <= 0) && ((x + y + 1) >= 0) && ((x - y -1) >= 0)
Прекрасно. Уравнения составлены правильно, но ваше неверное утверждение о "выше/ниже" привело к тому, что условия у вас получились неправильные. То, что ваше условие неверно, сразу очевидно из того факта, что точка (0, 0) ему не удовлетворяет.

Сформулируем правильные условия из ваших уравнений:

1. -x - y + 1 = 0. Вектор нормали (-1, -1) направлен внутрь фигуры. Значит интересующее нас условие -x - y + 1 >= 0, а не так как у вас.

2. x - y + 1 = 0. Вектор нормали (1, -1) направлен внутрь фигуры. Значит интересующее нас условие x - y + 1 >= 0, а не так как у вас.

3. x + y + 1 = 0. Вектор нормали (1, 1) направлен внутрь фигуры. Значит интересующее нас условие x + y + 1 >= 0. Здесь у вас правильно.

4. x - y - 1 = 0. Вектор нормали (1, -1) внезапно направлен наружу фигуры (!). Значит интересующее нас условие x - y - 1 <= 0, а не так как у вас. Я бы для единообразия это уравнение переписал как -x + y + 1 = 0 (вектор нормали направлен внутрь) и получил условие -x + y + 1 >= 0

Таким образом правильное условие, построенное этим способом, будет выглядеть так

C++
1
-x - y + 1 >= 0 && x - y + 1 >= 0 && x + y + 1 >= 0 && -x + y + 1 >= 0
Добавлено через 13 минут
Опять же, несложно видеть, что данное условие эквивалентно ранее уже приводившемуся

C++
1
std::abs(x) + std::abs(y) <= 1
2
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
14.10.2016, 00:39 12
Цитата Сообщение от BenJost Посмотреть сообщение
но выбивает постоянно "no"
Только я не понял, зачем вместо простейших выражений, приведенных в постах 6 и 7, вы используете такие громоздкие условия, которые к тому же, видимо, плохо понимаете
0
14.10.2016, 00:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.10.2016, 00:39
Помогаю со студенческими работами здесь

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

Написать программу, которая определяет, принадлежит ли точка области
Не могу разобраться с областью определения, помогите пожалуйста! Написать программу, которая...

Составить программу, которая печатает true, если точка с координатами (х,у) принадлежит заштрихованной области, и false в противном случае
Составить программу, которая печатает true, если точка с координатами (х,у) принадлежит...

Составить программу, которая печатает true, если точка с координатами (х,у) принадлежит заштрихованной области, и false в противном случае
Составить программу, которая печатает true, если точка с координатами (х,у) принадлежит...


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

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