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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2013, 23:06   #1
lisica198808
Пользователь
 
Регистрация: 06.11.2012
Сообщений: 64
Вопрос можно ли вписать задаваемый прямоугольник в задаваемый круг??пару вопросов

суть: необходимо узнать можно ли вписать задаваемый прямоугольник в задаваемый круг

програмку для вывода прямоугольника и круга составила. вот:
Код:
#include <graphics.h> // vkljy4it' opisanie grafi4eskich fynkcij С/С++ Borland'a
#include<stdio.h>
#include <conio.h>      // opisanie fynkcii vvoda-vivoda s konsoli(dlja getch())
#include<stdlib.h>


int okr()
{int a,b,r;
printf("vvedite koordinati centra i radius okru*nosti: ");
scanf("%d%d%d",&a, &b,&r); printf("\n");  
circle(a,b,r);
}

int prjamoyg()
{int x1,y1,width,height;
printf("vvedite koordinati prjamoygol'nika;\n");
printf("x1=");scanf("%d",&x1);printf("\n");
printf("y1=");scanf("%d",&y1);printf("\n");
printf("shirina=");scanf("%d",&width);printf("\n");
printf("visota=");scanf("%d",&height);printf("\n");
rectangle(x1,y1,width,height);
}



int main()
{int gdriver = DETECT, gmode, errorcode;
   initgraph(&gdriver, &gmode, "");
   
  setbkcolor(2);                                      
  setcolor(5);
  okr();
  setcolor(8); 
 prjamoyg();
  
  getch();                 
  closegraph();        
  return 0;
}
в универе сказали что если расстояние от центра окружности для всех вершин меньше радиуса, то прямоугольниак лежит внутри окружности.Расстояние определяется по теореме Пифагора.
не пойму как это реализовать. подскажите пожалуйста..

и в данном случае можно ли использовать функцию
Код:
rectangle
или необходимо задавать прямоугольник при помощи
Код:
lineto
, ведь там больше координат задается изначально??????????

хотелось бы используя данную функцию..задавая прямыми не всегда получается именно прямоугольник или же квадрат..
lisica198808 вне форума Ответить с цитированием
Старый 13.03.2013, 00:44   #2
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Ну, у Вас есть координаты центра окружности (x0, y0).
Затем, есть координаты четырех вершин прямоугольника, либо явно заданные, если Вы рисуете с помощью lineto, либо координаты левого верхнего угла (x, y), ширина (width) и высота (height) прямоугольника, через которые опять же легко выражаются координаты всех вершин: (x, y) ; (x + width, y) ; (x, y + height) ; (x + width, y + height).
Далее, для каждой вершины считаете расстояние до центра окружности как:
sqrt( (x - x0)^2 + (y - y0)^2) и сравниваете с радиусом. Если все 4 длины меньше радиуса, то прямоугольник вписан в окружность.
Μολὼν λαβέ
alexander13 вне форума Ответить с цитированием
Старый 13.03.2013, 07:51   #3
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

1. Рисовать в данной задаче ничего не нужно. Вообще.

2. Если стоит вопрос "можно ли вписать", значит, фигуры можно как угодно перемещать на плоскости, поэтому сформулированное Вами условие на 4 вершины не является решением задачи. Чтобы прямоугольник можно было вписать в круг, его диагональ должна быть меньше или равна диаметру.
s-andriano вне форума Ответить с цитированием
Старый 13.03.2013, 09:49   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

s-andriano, +1

Цитата:
в универе сказали что если расстояние от центра окружности для всех вершин меньше радиуса, то прямоугольниак лежит внутри окружности.Расстояние определяется по теореме Пифагора.
Если у Вас заданы координаты центра окружности, радиус окружности и координаты всех вершин прямоугольника, то по приведённой Вами цитате можно определить, лежит прямоугольник внутри окружности или нет.
Никаких намёков о "возможности всписать" тут и речи нет!

Определяйтесь, что Вам изначально задано и как сформулирована задача!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.03.2013, 19:46   #5
lisica198808
Пользователь
 
Регистрация: 06.11.2012
Сообщений: 64
По умолчанию

на счет рисования - сказали рисовать, значит рисовать..
на счет условия - как в методичке написано условие, так и пишу..
на счет задания - спасибо, вроде разобралась
lisica198808 вне форума Ответить с цитированием
Старый 13.03.2013, 21:06   #6
lisica198808
Пользователь
 
Регистрация: 06.11.2012
Сообщений: 64
По умолчанию

ну помогите пожалуйста еще идиотке.. и читала про функции много и вроде понимаю.. но как до практики - то лбом о стенку..
вот что у меня получилось:::
Код:
#include <graphics.h> // vkljy4it' opisanie grafi4eskich fynkcij Ñ/Ñ++ Borland'a
#include<stdio.h>
#include <conio.h>      // opisanie fynkcii vvoda-vivoda s konsoli(dlja getch())
#include<stdlib.h>


int okr(int *a,int *b,int *ñ)//zadaem okru*nosf'
{
printf("vvedite koordinati centra i radius okru*nosti: ");
scanf("%d%d%d",&*a, &*b,&*c); printf("\n");  
circle(*a,*b,*c);
}


int prjamoyg(int *xxx1,int *yyy1,int *width,int *height)//zadaem 4ygol'nik
{
printf("vvedite koordinati prjamoygol'nika;\n");
printf("x1=");scanf("%d",&*xxx1);printf("\n");
printf("y1=");scanf("%d",&*yyy1);printf("\n");
printf("shirina=");scanf("%d",&*width);printf("\n");
printf("visota=");scanf("%d",&*height);printf("\n");
rectangle(*x1,*y1,*width,*height);
}

int usl_prjamoyg()//mo*no li raspolo*it' 4ygol'nik v okru*nosti 
{ float xy41,xy42,xy43,xy44; 
  int x41,y41,x42,y42,x43,y43,x44,y44,sh,v;
  int x0,y0,r;float radius;
  okr(&x0,&y0,&r);
  radius=r;
  
  prjamoyg(&x41,&y41,&sh,&v);    
    
x42=x41+sh; y42=y41;
x43=x41; y43=y41+v;      //kordinati vershin prjamoygol'nika
x44=x41+sh;y44=y41+v;

//dlja ka*doj vershini s4itaem rasstojanie ot centra okru*nosti
xy41=sqrt(pow((x41-x0),2)+pow((y41-y0),2));
xy42=sqrt(pow((x42-x0),2))+pow((y42-y0),2));
xy43=sqrt(pow((x43-x0),2)+pow((y43-y0),2));
xy44=sqrt(pow((x44-x0),2)+pow((y44-y0,2));
// i sravnivaem s radiusom
if (xy41&xy42&xy43&xy44)< r 
   printf ("chetirexygl'nik vpisuvaetsa v okru*nost'");
   else printf("chetirexygl'nik ne vpisuvaetsa v okru*nost'");
}







 int main()
{int gdriver = DETECT, gmode, errorcode;
   initgraph(&gdriver, &gmode, "");
   int x0,y0,r; int x41,x42,sh,v;
  setbkcolor(2);                                      
  setcolor(5);
  okr(int &x0,int &y0,int &r);
  setcolor(8); 
 prjamoyg(int &x41,int &x42,int &sh,int &v);
     
  getch();                 
  closegraph();        
  return 0;
}

больше всего выбивает ошибок вот таких: expected primary-expression before "int"

я не понимаю хоть убей что не так делаю, и как правильно..помогите разобрать мои ошибки.. препод злюка заявил что должна сама разобрать и никакой подсказки.. а я не понимаю
lisica198808 вне форума Ответить с цитированием
Старый 13.03.2013, 22:25   #7
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,310
По умолчанию

И все же. Надо определиться с условием задачи.
1.
Цитата:
можно ли вписать задаваемый прямоугольник в задаваемый круг
Вписаный четырехугольник - все вершины лежат на круге.
Т.е. радиус окружности должен быть равен половине диагонали прямоугольника: r = AC/2;
В противном случае можно говорить, например, о том, что прямоугольник может находиться внутри круга, пересекаться с кругом или, как вариант, когда размеры всех сторон прямоугольника больше диаметра круга - круг может разместиться внутри прямоугольника и т.д. (см. вариант с квадратом).
Т.о. ответ должен быть однозначным:
Если r = AC/2, то прямоугольник может быть вписан в окружность, а иначе НЕТ.

2.
Вторая проблема: В вычислениях используются два типа переменных - int и float. Думаю, что проблем станет меньше, если все переменные сделать целого типа.
Помнится, что, например, pow - работает с вещественным типом. Возведение в квадрат лучше реализовать простым перемножением.
Для сравнения радиуса круга и размера диагонали, можно сравнивать квадрат диагонали и квадрат диаметра круга.

Ежели что-то не так, то гуру поправят.


Как-то так ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 13.03.2013, 23:10   #8
lisica198808
Пользователь
 
Регистрация: 06.11.2012
Сообщений: 64
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
И все же. Надо определиться с условием задачи.


Ежели что-то не так, то гуру поправят.


Как-то так ...
определить, лежит прямоугольник внутри окружности или нет.
и все равно все целые значения не получатся- там где
Код:
//dlja ka*doj vershini s4itaem rasstojanie ot centra okru*nosti
xy41=sqrt(pow((x41-x0),2)+pow((y41-y0),2));
xy42=sqrt(pow((x42-x0),2))+pow((y42-y0),2));
xy43=sqrt(pow((x43-x0),2)+pow((y43-y0),2));
xy44=sqrt(pow((x44-x0),2)+pow((y44-y0,2));
будет тип float все равно




если гуру это препод - то наш не поправит. он у нас женофоб.

приходится все самой. а без ошибок и недопонимания не умею1 курс всетаки..
а здесь помогут - это хорошо


меня больше функции интересуют - правильно ли описала или нет????????
lisica198808 вне форума Ответить с цитированием
Старый 14.03.2013, 00:04   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
if (xy41&xy42&xy43&xy44)< r 
   printf ("chetirexygl'nik vpisuvaetsa v okru*nost'");
   else printf("chetirexygl'nik ne vpisuvaetsa v okru*nost'");
}
я, конечно, C не знаю, но это Вы написали полную ахинею..
так сравнивать нельзя!
попробуйте так:
Код:
if ( (xy41<r) && (xy42<r) && (xy43<r) && (xy44<r) )
   printf ("chetirexygl'nik vpisuvaetsa v okru*nost'");
   else printf("chetirexygl'nik ne vpisuvaetsa v okru*nost'");
}
p.s. возможно, что для логического "И" (логическое AND) удваивать & в языке C и не нужно.. разберитесь с этим самостоятельно...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.03.2013, 09:12   #10
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
2. Если стоит вопрос "можно ли вписать", значит, фигуры можно как угодно перемещать на плоскости, поэтому сформулированное Вами условие на 4 вершины не является решением задачи. Чтобы прямоугольник можно было вписать в круг, его диагональ должна быть меньше или равна диаметру.
Я бы даже сказал больше:

Цитата:
Вписанным в круг многоугольником называется такой многоугольник, вершины которого лежат на окружности.
соответственно, обе диагонали должны быть равны диаметру, а точка пересечения диагоналей совпадает с центром окружности. (следует из равноудаленности вершин от центра окружности и параллельности прямых)
Координаты точки пересечения диагоналей вычисляются как среднее арифметическое соответствующих координат его вершин.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пару вопросов... qewertyns Помощь студентам 6 10.12.2012 00:43
Как можно создать графический редактор где можно с помощю циркуля рисовать круг, а с линейки чертитьлинию Aksuubai Общие вопросы Delphi 3 03.06.2010 19:18
Пару вопросов Syltan Свободное общение 2 19.10.2009 01:45
Пару вопросов о DynamicSkinForm Relrin Компоненты Delphi 6 22.04.2008 04:03