Форум программистов, компьютерный форум CyberForum.ru

Геометрическая фигура круг - C++

Восстановить пароль Регистрация
 
СПП
25 / 25 / 2
Регистрация: 15.12.2012
Сообщений: 71
25.01.2013, 10:58     Геометрическая фигура круг #1
Здравствуйте, столкнулся с такой проблемой,
задание такое, дан круг и точка, выявить, лежит ли точка в круге, на окружности, или вообще нележит
вот мой код
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
#include <iostream>
#include <cstdlib>
#include <clocale>
 
void krug(double cx , double cy, double R, double tx, double ty){
// НЕ ЛЕЖИТ --------------------------
    if(cx+R<tx && cy+R<ty) // например: х(1)+R(3)<tx(5) -> нележит
        std::cout << "Точка нележит на плоскости (1)" << std::endl;
    else if(tx<0){
        if(cx-R>tx && cy-R>ty) // например: х(1)-R(3)<tx(-4) -> нележит т.к. "-2 > -4"
            std::cout << "Точка нележит на плоскости (2)" << std::endl;
    }
// ЛЕЖИТ НА ОКРУЖНОСТИ----------------
    else if(cx+R==tx && cy+R==ty || cx+R==tx || cy+R==ty) // например: x(1)+R(3)=tx(4) -> лежит на окружности
        std::cout << "Точка лежит на окружности (3)" << std::endl;
// ЛЕЖИТ  ----------------------------
    else // например: х(1)+R(3)>tx(3) -> лежит
        std::cout << "Точка лежит внутри круга (4)" << std::endl;
}
int main(){setlocale(LC_ALL,"Rus");
    double cx, cy, R; // -> круг-данные
    std::cout << "Введите х-круга: ";std::cin >> cx;
    std::cout << "Введите у-круга: ";std::cin >> cy;
    std::cout << "введите R-круга: ";std::cin >> R;
    double tx, ty; // точка-данные
    std::cout << "Введите х-точки: ";std::cin >> tx;
    std::cout << "Введите у-точки: ";std::cin >> ty;
    krug(cx,cy,R,tx,ty);
system("pause");
return 0;
}
Код правильный, работает без ошибок, компилятор ни на что не ругается
Но когда я тестил программу. выявил такую проблему, что я немогу её исправить
Я покажу на картинке
Геометрическая фигура круг
я ввожу коортината круга: х=1, у=1, R=1, точки: х=2, у=2
и мне компилятор выдаёт что точка лежит на окружности, а должно выводить что оно нележит
я незнаю в чём проблема ведь R=1

Помогите пожалуйста, как мне правильно построить круг.

ЗЫ. вот эти "Точка нележит на плоскости (1)" -> (1),(2), (3), (4) , я написал чтобы мне легче было писать циклы if,else, тоесть когда я тестил я проверял все три варианта, и смотрел как я в двухмерно понимаю расположение, и как понимает компьютер, на них можно внимания необращать
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2013, 10:58     Геометрическая фигура круг
Посмотрите здесь:

C++ геометрическая программа (С++)
геометрическая прогрессия C++
Геометрическая фигура C++
C++ Геометрическая фигура и рейсы самолетов
Класс "Геометрическая фигура" C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Stanis
52 / 41 / 8
Регистрация: 16.12.2012
Сообщений: 144
25.01.2013, 11:48     Геометрическая фигура круг #2
Ты слишком сложно написал , для такой простой программы.
Вот рабочая
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
#include <math.h>
#include <cstdlib>
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(0,"");
    double x1=0,y1=0,x2=0,y2=0,R=0,length=0;
    cout<<"Введите x круга . ";cin>>x1;
    cout<<endl<<"Введите y круга . ";cin>>y1;
    cout<<endl<<"Введите R круга . ";cin>>R;
    cout<<endl<<"Введите x точки . ";cin>>x2;
    cout<<endl<<"Введите y точки . ";cin>>y2;
    length=pow(pow((x2-x1),2)+pow((y2-y1),2),0.5);
    cout<<"length"<<length<<endl;
    if(length>R)
    {cout<<endl<<"Точка вне круга"<<endl;}
    else if(length==R)
    {cout<<endl<<"Точка на окружности"<<endl;}
    else
    {cout<<endl<<"Точка внутри круга"<<endl;}
    system("pause");
    return 0;
}
Pure
 Аватар для Pure
228 / 49 / 2
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
25.01.2013, 11:58     Геометрическая фигура круг #3
предлагаю иной метод подсчета.

1.необходимо узнать координаты центра окружности
2.сравнить расстояние до данной точки от центра окружности, с радиусом.
Если оно больше радиуса - точка не лежит на окружности - как раз это видно на картинке.

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

Длина гипотенузы это и есть расстояние от центра до точки, сравниваем с радиусом и принимаем решение.

Ну а по твоей схеме да- точка будет лежать на окружности
СПП
25 / 25 / 2
Регистрация: 15.12.2012
Сообщений: 71
25.01.2013, 13:39  [ТС]     Геометрическая фигура круг #4
Цитата Сообщение от Stanis Посмотреть сообщение
C++
1
length=pow(pow((x2-x1),2)+pow((y2-y1),2),0.5);
Я так понял что мы ищем длину от центра-круга до точки
длина = координата х2(у2) отнимаем х1(у1), находим что??? и эти числа возводим в степень 2
потом эти числа х3 и у3 возводим в степнь = 0,5
Вы можете мне поподробнее написать, что к чему? и зачем так делать?
я понял что мы ищем длину, но каким принципом
я бы хотел бы услышать, как правильно прочитать этот код

Цитата Сообщение от Pure Посмотреть сообщение
предлагаю иной метод подсчета.
1.необходимо узнать координаты центра окружности
2.сравнить расстояние до данной точки от центра окружности, с радиусом.
Если оно больше радиуса - точка не лежит на окружности - как раз это видно на картинке.
Но для этого нужна более мелкая шкала деления минимум.
Далее расчет. Поскольку, как видно из твоего рисунка, при помощи центра окружности и нашей точки мы всегда сможем составить квадрат. Соотвественно диагональ квадрата это и будет расстояние до нашей точки.
Как найти диагональ? Поскольку у нас квадрат, то диагональ делит его на 2 прямоугольных треугольника.
Это позволяет нам использовать следующее
В прямоугольном треугольнике квадрат длины гипотенузы равен сумме квадратов длин катетов.
Длина гипотенузы это и есть расстояние от центра до точки, сравниваем с радиусом и принимаем решение.
Ну а по твоей схеме да- точка будет лежать на окружности
Значит х-точки = 1катит, у-точки = 2катит
А если точка имеет координаты [0;1] или [1;0]
Или в реализацию этой проблемы, мне нужно будет оставить часть написанного моего кода
Stanis
52 / 41 / 8
Регистрация: 16.12.2012
Сообщений: 144
25.01.2013, 14:30     Геометрическая фигура круг #5
Цитата Сообщение от СПП Посмотреть сообщение
Я так понял что мы ищем длину от центра-круга до точки
длина = координата х2(у2) отнимаем х1(у1), находим что??? и эти числа возводим в степень 2
потом эти числа х3 и у3 возводим в степнь = 0,5
Вы можете мне поподробнее написать, что к чему? и зачем так делать?
я понял что мы ищем длину, но каким принципом
я бы хотел бы услышать, как правильно прочитать этот код
Потому что по такой формуле находится расстояние между двумя точками на плоскости
d-расстояние , d=((x2-x1)2+(y2-y1)2)(1/2)
Нашли расстояние от центра окружности до нашей точки и затем сравниваем его с радиусом.
Если больше радиуса , то за окружностью если меньше то в окружности если равны то наша
точка лежит на нашей окружности.
СПП
25 / 25 / 2
Регистрация: 15.12.2012
Сообщений: 71
25.01.2013, 16:13  [ТС]     Геометрическая фигура круг #6
Цитата Сообщение от Stanis Посмотреть сообщение
Потому что по такой формуле находится расстояние между двумя точками на плоскости
d-расстояние , d=((x2-x1)2+(y2-y1)2)(1/2)
я понил что по такой формуле находится, я вот непойму как это выявили
Вы сами видели, как я рассуждал, чтобы сделать задание.
Мне бы хотелось услышать то, чтобы я этот принцип запомнил не ввиде програмного кода, а ввиде человеческой логике и смог позже применить его в других аналогичных программах без чей-то помощи.
Yandex
Объявления
25.01.2013, 16:13     Геометрическая фигура круг
Ответ Создать тему
Опции темы

Текущее время: 17:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru