Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 05.05.2018
Сообщений: 64

Определить, лежит ли точка внутри заштрихованной области

25.09.2018, 20:02. Показов 6274. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста. Дана точка на плоскости с координатами (x,y). Составить программу, которая выдаёт одно из сообщений "Да","Нет","На границе" в зависимости от того, лежит ли точка внутри заштрихованной области, вне заштрихованной области или на её границе. Области задаются графичиски следующим образом.
За ранее спасибо.
Миниатюры
Определить, лежит ли точка внутри заштрихованной области  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.09.2018, 20:02
Ответы с готовыми решениями:

Определить, лежит ли точка в полукруге
Составить программу, которая выдает одно из сообщений "Да", "Нет", "На границе" в зависимости от того, лежит ли точка внутри заштрихованной...

Определить, лежит ли точка вне кольца
Дана точка на плоскости с координатами (х, у). Составить программу, которая выдает одно из сообщений «Да», «Нет», «На границе» в...

Определить, лежит ли точка вне кольца
Дана точка на плоскости с координатами (х, у). Составить программу, которая выдает одно из сообщений «Да», «Нет», «На границе» в...

18
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
25.09.2018, 20:28
расчет областей можно увидеть (имеется в виду, то как вы будете рассчитывать математически области).
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
25.09.2018, 20:50
То бишь, ты хочешь чтобы тебе сделали все 9 вариантов
0
18 / 15 / 8
Регистрация: 24.02.2013
Сообщений: 47
25.09.2018, 21:24
Ну все три условия видны
C#
1
2
3
4
5
6
if(y < x && x > 0 && y < 70)
//это нестрогое условие, значит не граница, а внутренняя область
else if(y == x && x == 0 && y == 70)
//а это равенство - значит это на границе
else
//это внешняя область
Дальше сами.
0
0 / 0 / 0
Регистрация: 05.05.2018
Сообщений: 64
25.09.2018, 22:16  [ТС]
Masson1848. Не все, только 7 вариант
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
25.09.2018, 22:32
Цитата Сообщение от Koropet Посмотреть сообщение
Ну все три условия видны
ну вот подставьте в ваш код точку на границе (70, 1)
Travka56, а вы вместо выдумывания ника вбили бы "принадлежит ли точка треугольнику"
Реализация - считаются произведения (1, 2, 3 - вершины треугольника, 0 - точка):
(x1 - x0) * (y2 - y1) - (x2 - x1) * (y1 - y0)
(x2 - x0) * (y3 - y2) - (x3 - x2) * (y2 - y0)
(x3 - x0) * (y1 - y3) - (x1 - x3) * (y3 - y0)
Если они одинакового знака, то точка внутри треугольника, если что-то из этого - ноль, то точка лежит на стороне, иначе точка вне треугольника.
1
18 / 15 / 8
Регистрация: 24.02.2013
Сообщений: 47
26.09.2018, 10:51
Виноват, конечно иже ограничивающие функции это x=70 и y=0. Перепутал координаты.
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
26.09.2018, 11:10
Koropet, ну поменяйте ваш код, и подставьте еще раз (70,1).
Это изначально ущербная методика, так только квадрат худо бедно можно описать
0
18 / 15 / 8
Регистрация: 24.02.2013
Сообщений: 47
26.09.2018, 12:43
C#
1
2
3
4
5
6
if(y < x && y > 0 && x < 70)
//внутренняя
else if(y > x && y < 0 && x > 70)
//внешняя
else
//граница
Можно описать любую область, ограниченную графиками функций. Например условие x2+y2<r2 будет задавать точки внутри круга с центром (0;0) и радиусом r. В других вариантах это есть.
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
26.09.2018, 12:53
Koropet, не устали? Ну вставляйте тогда в ваш код внешнюю точку (1,2)

Добавлено через 1 минуту
Цитата Сообщение от Koropet Посмотреть сообщение
Можно описать любую область, ограниченную графиками функций
естесно можно, но только не вашим треш-методом
0
18 / 15 / 8
Регистрация: 24.02.2013
Сообщений: 47
26.09.2018, 13:34
Да, устал, да, мне было лень думать над идеально правильным построением условий и проверять свой же код.
C#
1
2
3
4
5
6
if(y < x && y > 0 && x < 70)
//внутренняя
else if(y > x || y < 0 || x > 70)
//внешняя
else
//граница
Напишите тогда более удачный код для проверки принадлежности области внутри графиков.

Да, я в курсе, что если в этот код подставим точки на графиках, а не на границе, получим случай на границе. Извините, но мне пока также лень решать эту проблему. Может автор сам додумается.
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
26.09.2018, 16:29
Простой матан. Даже думать не надо

C#
1
2
3
if(y=x||x=70&&y<=70&&|| x<=70 && y=0) Console.WriteLine("Граница");
else if (x>0 && x<70 && y<x ) Console.WriteLine("Внутри");
else Console.WriteLine("Вне");

Не по теме:

Добавлено через 4 минуты
Koropet, Смысл того, что вы отвечаете здесь. Если вам лень решать проблему. А вы просто пишите часть решения, а остальное без разницы. Мне кажется, это как-то неразумно писать неработающий код...

0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
26.09.2018, 16:45
Цитата Сообщение от Masson1848 Посмотреть сообщение
&&||
а разве это вот здесь
Цитата Сообщение от Masson1848 Посмотреть сообщение
if(y=x||x=70&&y<=70&&|| x<=70 && y=0) Console.WriteLine("Граница");
будет работать?
0
0 / 0 / 0
Регистрация: 05.05.2018
Сообщений: 64
26.09.2018, 21:04  [ТС]
а можно полностью весь код кинуть? я уже не понимаю что происходит
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
26.09.2018, 23:05
V_Monomax, Вы правы. Я немного накосячил.

Travka56, Вот метод, который вставляешь, передаёшь х и у и всё работает.
C#
1
2
3
4
5
6
static void f(int x,int y)
        {
            if (y == x || x == 70 && y <= 70 || x <= 70 && y == 0) Console.WriteLine("Граница");
            else if (x > 0 && x < 70 && y < x) Console.WriteLine("Внутри");
            else Console.WriteLine("Вне");
        }
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
27.09.2018, 08:18
Вот неискоренить из человека тягу к халяве.
Сидят же, корпят над условиями, думают что быстрее будет, а пока все условия подберут уже 3 раза бы написали бы Универсальный метод под ВСЕ треугольники в мире, который я выложил в 6 сообщении
0
18 / 15 / 8
Регистрация: 24.02.2013
Сообщений: 47
27.09.2018, 09:37
Заодно ваш код можно и на выпуклые многоугольники использовать!
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16142 / 11265 / 2888
Регистрация: 21.04.2018
Сообщений: 33,127
Записей в блоге: 2
27.09.2018, 17:09
Цитата Сообщение от Рядовой Посмотреть сообщение
Универсальный метод под ВСЕ треугольники в мире, который я выложил в 6 сообщении
Цитата Сообщение от Koropet Посмотреть сообщение
Заодно ваш код можно и на выпуклые многоугольники использовать!
Ну... раз просили...
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
        #region Определить, лежит ли точка внутри заштрихованной области (выпуклый многоугольник)
        /// <summary>Метод вычисляет где находится точка по отношению к выпуклому многоугольнику</summary>
        /// <param name="point">Координаты точки</param>
        /// <param name="polygon">Координаты вершин многоугольника</param>
        /// <returns>Возвращает: 1 - внутри, 0 - на границе, -1 - вне.</returns>
        static int DeterminePointPolygon(Point point, Point[] polygon)
        {
            int count = polygon.Length;
            int[] sign = new int[count];
 
            sign[count - 1] = Math.Sign((polygon[count].X - point.X) * (polygon[0].Y - polygon[count].Y)
                                - (polygon[0].X - polygon[count].X) * (polygon[count].Y - point.Y));
            if (sign[count - 1] == 0) return 0;
 
            for (int i = 0; i < count - 1; i++)
            {
                sign[i] = Math.Sign((polygon[i].X - point.X) * (polygon[i + 1].Y - polygon[i].Y)
                          - (polygon[i + 1].X - polygon[i].X) * (polygon[i].Y - point.Y));
                if (sign[i] == 0) return 0;
                if (sign[i] != sign[count - 1]) return -1;
            }
 
            return 1;
        }
        #endregion
Добавлено через 6 часов 28 минут
Ошибка!!!
Забыл минусы поставить!
C#
1
2
sign[count - 1] = Math.Sign((polygon[count-1].X - point.X) * (polygon[0].Y - polygon[count-1].Y)
                                - (polygon[0].X - polygon[count-1].X) * (polygon[count-1].Y - point.Y));
1
Заблокирован
27.09.2018, 18:14
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
using System;
 
public class Program
{
    public static void Main()
    {
        Console.WriteLine("Введите X:");
        double x = double.Parse(Console.ReadLine());
        Console.WriteLine("Введите Y:");
        double y = double.Parse(Console.ReadLine());
        string result = Test(x, y);
        Console.WriteLine(result);
    }
    
    public static string Test(double x, double y)
    {
        const int c = 70;
        
        if ((x >= 0 && x <= c && y == 0) ||
            (y >= 0 && y <= c && x == c) ||
            (x >= 0 && x <= c && y >= 0 && y <= c && y == x))
        {
            return "На границе";
        }
        
        if (x > 0 && x < c && y > 0 && y < x)
        {
            return "Да";  
        }
        
        return "Нет";
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.09.2018, 18:14
Помогаю со студенческими работами здесь

Определить, лежит ли точка в полукольце
доброе время суток уважаемые форумчане. недавно начали изучать c#. задали написать программы. I. Дана точка на плоскости с координатами...

Определить, лежит ли точка внутри заштрихованной области
Дана точка на плоскости с координатами ( x, y).Составить программу, которая выдает одно из сообщений: «Точка с координатами ( x, y) лежит...

Определить, лежит ли точка внутри заштрихованной области
Дана точка на плоскости с координатами (х, у). Составить программу, которая выдает одно из сообщений &quot;Да&quot;, &quot;Нет&quot;,...

Определить, лежит ли точка внутри заштрихованной области
Дана точка на плоскости с координатами (х, у). Составить программу, которая выдает одно из сообщений &quot;Точка с координатами (х, у)...

Определить, лежит ли точка внутри заштрихованной области
Дана точка на плоскости с координатами (X, Y). Составить программу, которая выдает одно из сообщений &quot;Да&quot;, &quot;Нет&quot;,...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru