Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2010, 15:22   #1
Evgenii90
Пользователь
 
Регистрация: 05.03.2010
Сообщений: 14
Стрелка Попадание точки в область (С++)

Нужно написать программу попадания точки в область... Когда вводим координаты, должно вывести попадает, или нет...

Сама область



С геометрией у меня беда, вот прошу помощи, как "описать" нижний полукруг...

Вот до чего я дошел...

Код:
#include <stdio.h>
#include <math.h>
#include <conio.h>
int main(void) {
double x, y; /* koordinati to4ek */
/* vvod */
printf("Vvedite x >");
scanf("%lf",&x);
printf("Vvedite y >");
scanf("%lf",&y);
/* Vivod */
printf("x=%6.3lf; y=%6.3lf\n",x,y);
/* Proverka */
if ( (x>=-1) && (x<=1) && (y<=1) && (sqrt(x)+sqrt(y)>=-1)) printf("Popadaet\n");
else printf("Ne popadaet\n");
getch();
return 0;
}
Мне еще дали вот это в помощь, но увы не могу понять как выразить отрицательное у через х2+у2=1...


Последний раз редактировалось Stilet; 15.04.2010 в 15:48.
Evgenii90 вне форума Ответить с цитированием
Старый 15.04.2010, 15:48   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Evgenii90 Посмотреть сообщение
if ( (x>=-1) && (x<=1) && (y<=1) && (sqrt(x)+sqrt(y)>=-1)) printf("Popadaet\n");
Нет. Будет у Вас, к примеру, точка (0,-0.5). Как Вы собираетесь извлекать корень из отрицательного y?..
...
Ур-е окружности радиуса R с центром в начале координат:
x^2+y^2 = R^2
При R=1:
x^2+y^2 = 1
Отсюда
y = ±sqrt(1-x^2)
С "плюсом" будет та дуга, которая выше оси OX (которая Вам сейчас не нужна), с "минусом" - та, которая ниже. Таким образом, четвёртое условие в Вашем if'е будет
Код:
y > -sqrt(1.-x*x)
Vago вне форума Ответить с цитированием
Старый 15.04.2010, 15:58   #3
Evgenii90
Пользователь
 
Регистрация: 05.03.2010
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Vago Посмотреть сообщение
Нет. Будет у Вас, к примеру, точка (0,-0.5). Как Вы собираетесь извлекать корень из отрицательного y?..
...
Ур-е окружности радиуса R с центром в начале координат:
x^2+y^2 = R^2
При R=1:
x^2+y^2 = 1
Отсюда
y = ±sqrt(1-x^2)
С "плюсом" будет та дуга, которая выше оси OX (которая Вам сейчас не нужна), с "минусом" - та, которая ниже. Таким образом, четвёртое условие в Вашем if'е будет
Код:
y > -sqrt(1.-x*x)
Спасибо большое! У меня еще один вопрос, а зачем после 1 ставить точку?
Evgenii90 вне форума Ответить с цитированием
Старый 15.04.2010, 16:28   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Evgenii90 Посмотреть сообщение
зачем после 1 ставить точку?
А это определяет тип константы. Поскольку я знаю, что аргумент ф-ии sqrt() должен быть типа double, то я, теоретически, облегчаю жизнь транслятору, заранее приводя все операнды выражения в скобках к double. На самом деле, он (транслятор) и без этой точки преобразование сделает.

Added 15:49 CET
Да, заметил, что Вы в первых трёх условиях границу считаете. Ну тогда поставьте и в четвёртом >= вместо > .

Последний раз редактировалось Vago; 15.04.2010 в 17:49.
Vago вне форума Ответить с цитированием
Старый 16.04.2010, 19:49   #5
Evgenii90
Пользователь
 
Регистрация: 05.03.2010
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Vago Посмотреть сообщение
А это определяет тип константы. Поскольку я знаю, что аргумент ф-ии sqrt() должен быть типа double, то я, теоретически, облегчаю жизнь транслятору, заранее приводя все операнды выражения в скобках к double. На самом деле, он (транслятор) и без этой точки преобразование сделает.

Added 15:49 CET
Да, заметил, что Вы в первых трёх условиях границу считаете. Ну тогда поставьте и в четвёртом >= вместо > .
Да-да поставил... Граница тоже входит!

У меня еще один вопрос, дайте идею - закончу сам, а именно:





Эту область найти не трудно, ограничив её y<=-x+1, но как быть с остальными? Это почти не полный ромб... Может кто то, что то посоветует?

#include <stdio.h>
#include <math.h>
#include <conio.h>
int main(void) {
double x, y; /* koordinati to4ek */
/* vvod */
printf("Vvedite x >");
scanf("%lf",&x);
printf("Vvedite y >");
scanf("%lf",&y);
/* Vivod */
printf("x=%6.3lf; y=%6.3lf\n",x,y);
/* Proverka */
if ( (x>=0) && (y>=0) && (y<=-x+1) || (formula ostalnix 4astei)) printf("Popadaet\n");
else printf("Ne popadaet\n");
getch();
return 0;
}
Изображения
Тип файла: jpg 1.jpg (8.8 Кб, 80 просмотров)

Последний раз редактировалось Evgenii90; 16.04.2010 в 20:45. Причина: Добавил имг.
Evgenii90 вне форума Ответить с цитированием
Старый 16.04.2010, 20:31   #6
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

500960.jpg

Картинкохранилище отправилось спать...
Vago вне форума Ответить с цитированием
Старый 16.04.2010, 20:47   #7
Evgenii90
Пользователь
 
Регистрация: 05.03.2010
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Vago Посмотреть сообщение
Вложение 23953

Картинкохранилище отправилось спать...
Блин... Залил на форум! y<=-x+1 для области у+, х+
Evgenii90 вне форума Ответить с цитированием
Старый 16.04.2010, 21:14   #8
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Код:
#!/usr/bin/python
# -*- coding: cp1251 -*-

(x,y) = input()

isIn = False
if x < 0:
    if y >= 0. and y <= x+1:
        isIn = True
else:
    if y >= x-1 and y <= 1-x:
        isIn = True

print "The point (", x, ",", y, ") is",
if isIn:
    print "in",
else:
    print "out of",
print "the region."

#
На Цэ уже сами перекладывайте...
Vago вне форума Ответить с цитированием
Старый 16.04.2010, 21:47   #9
Evgenii90
Пользователь
 
Регистрация: 05.03.2010
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Vago Посмотреть сообщение
Код:
#!/usr/bin/python
# -*- coding: cp1251 -*-

(x,y) = input()

isIn = False
if x < 0:
    if y >= 0. and y <= x+1:
        isIn = True
else:
    if y >= x-1 and y <= 1-x:
        isIn = True

print "The point (", x, ",", y, ") is",
if isIn:
    print "in",
else:
    print "out of",
print "the region."

#
На Цэ уже сами перекладывайте...
#include <stdio.h>
#include <math.h>
#include <conio.h>
int main(void) {
double x, y; /* koordinati to4ek */
/* vvod */
printf("Vvedite x >");
scanf("%lf",&x);
printf("Vvedite y >");
scanf("%lf",&y);
/* Vivod */
printf("x=%6.3lf; y=%6.3lf\n",x,y);
/* Proverka */
if ( (x<=0) && (y>=0) && (y<=-x+1) || (y>=x-1) || (y<=1-x)) printf("Popadaet\n");
else printf("Ne popadaet\n");
getch();
return 0;
}

не считает...
Evgenii90 вне форума Ответить с цитированием
Старый 16.04.2010, 22:08   #10
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>

main() {

   double x, y; /* koordinati to4ek */
   /* vvod */
   printf("Vvedite x >");
   scanf("%lf",&x);
   printf("Vvedite y >");
   scanf("%lf",&y);
   /* Vivod */
   printf("x=%6.3lf; y=%6.3lf\n",x,y);

   bool isIn = false;
   if ( x < 0 ) {
      if ( y >= 0. && y <= x+1 )
         isIn = true;
   } else {
      if ( y >= x-1 && y <= 1-x )
         isIn = true;
   }

   if ( isIn )
      printf("Popadaet\n");
   else
      printf("Ne popadaet\n");

   return 0;

}
Vago вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
По графику определить условия попадения точки в область Lange Помощь студентам 20 07.11.2009 15:24
Попадание точки в заштрихованную область C# diman87 Помощь студентам 2 26.09.2009 14:01
входение точки в область, с++ tipilat Помощь студентам 7 19.09.2009 00:42
Попадание точки в область С++ Geg[C/c++] Помощь студентам 3 03.05.2009 12:58
Попадание точки в заштрихованную область (программа на условие), C++ 3.1 #Nii Помощь студентам 2 16.10.2008 20:22