Tassadar |
Отправлено: 15.12.2006, 00:18 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 1
|
Нужно написать класс определяющий возможно ли вписать в правильный выпуклый 4-х угольник окружность.Если заданы коорд. вершин. Если честно идей вообще нет, все это с перезагрузкой. Помогите плз если кто знает
заранее спасибо. |
|
exp |
Отправлено: 15.12.2006, 01:05 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
Правильный выпуклый четырёхугольник — это квадрат. Класс должен возвращать 1.
|
|
exp |
Отправлено: 15.12.2006, 02:48 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
Что-то меня пробило на ночь глядя попрограммить ... бывает.. заняла меня задачка твоя
вот исходник рабочего откомпилированного консольного проекта в BDS. нужные тебе файлы: uTMyPoint.cpp, uTMyPoint.h, uTMyRectangle.cpp, uTMyRectangle.h
Ковыряй.
Самораспакавывающийся zip-архив
Ага, фигвам, . нельзя ехе грузить.
Так что. открытым кодом прям тут обсуждать будем
uTMyPoint.h
Простой класс точки на плоскости. для облегчения своей участи
CODE |
#ifndef uTMyPointH
#define uTMyPointH
#include <math.h>
//---------------------------------------------------------------------------
class TMyPoint
{
public:
double x;
double y;
TMyPoint()
{
y = x = 0.0;
}
TMyPoint(const TMyPoint &Point)
{
x = Point.x;
y = Point.y;
}
TMyPoint(double _x, double _y)
{
x = _x;
y = _y;
}
TMyPoint operator -(TMyPoint &P);
TMyPoint operator +(TMyPoint &P);
TMyPoint operator *(double C);
TMyPoint operator /(double C);
bool operator ==(TMyPoint &P);
bool operator !=(TMyPoint &P);
double abs();
double distance_to(TMyPoint &P);
TMyPoint friend bissect(TMyPoint O, TMyPoint P1, TMyPoint P2);
TMyPoint friend intersect(TMyPoint l1_p1, TMyPoint l1_p2,TMyPoint l2_p1, TMyPoint l2_p2);
};
#endif
|
uTMyPoint.cpp
Реализация методов класса
CODE |
//---------------------------------------------------------------------------
#pragma hdrstop
#include "uTMyPoint.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
TMyPoint TMyPoint::operator -(TMyPoint &P)
{
return TMyPoint(x-P.x,y-P.y);
}
TMyPoint TMyPoint::operator +(TMyPoint &P)
{
return TMyPoint(x+P.x,y+P.y);
}
TMyPoint TMyPoint::operator *(double C)
{
return TMyPoint(C*x,C*y);
}
TMyPoint TMyPoint::operator /(double C)
{
return TMyPoint(x/C,y/C);
}
bool TMyPoint::operator ==(TMyPoint &P)
{
return (x==P.x)&&(y==P.y);
}
bool TMyPoint::operator !=(TMyPoint &P)
{
return (x!=P.x)||(y!=P.y);
}
double TMyPoint::abs()
{
return sqrt(x*x+y*y);
}
double TMyPoint::distance_to(TMyPoint &P)
{
return (P — *this).abs();
}
TMyPoint bissect(TMyPoint O, TMyPoint P1, TMyPoint P2)
{
TMyPoint Res;
Res.x = (P1.x+P2.x)/2.0;
if(P1!=P2 && P2!=O)
Res.y = (Res.x-O.x)*(O.distance_to(P1)*(P2.x-O.x)-O.distance_to(P2)*(P1.x-O.x))/(O.distance_to(P2)*(P1.y-O.y)-O.distance_to(P1)*(P2.y-O.y))+O.y;
else
{
if(P1 == P2) Res = P1;
else if(P1==O) Res = P2;
else Res = P1;
}
return Res;
}
TMyPoint intersect(TMyPoint l1_p1, TMyPoint l1_p2,TMyPoint l2_p1, TMyPoint l2_p2)
{
TMyPoint v1 = l1_p2-l1_p1;
TMyPoint v2 = l2_p2-l2_p1;
TMyPoint Res;
try{
if(((v1.y/v1.x)!=(v2.y/v2.x)))
{
TMyPoint temp = l1_p2+l2_p1-l2_p2-l1_p1;
if(temp.x!=0.0)
{
Res = (l1_p2-l1_p1)*(l2_p1.x-l1_p1.x)/temp.x+l1_p1;
}
else
{
Res = (l1_p2-l1_p1)*(l2_p1.y-l1_p1.y)/temp.y+l1_p1;
}
}
}
catch(...)
{
return Res;
}
return Res;
}
|
uTMyRectangle.h
А вот объявление класса нашего умного четырёхугольника. Слово Rectangle здесь, конечно, не подходит, ну да мне пофиг
CODE |
//---------------------------------------------------------------------------
#ifndef uTMyRectangleH
#define uTMyRectangleH
#include "uTMyPoint.h"
//---------------------------------------------------------------------------
class TMyRectangle
{
public:
TMyPoint c1;
TMyPoint c2;
TMyPoint c3;
TMyPoint c4;
bool IsItPossibleToEnterACircle(); //Перевод от www.translate.ru
};
#endif
|
uTMyRectangle.cpp
Реализация методов класса TMyRectangle
CODE |
//---------------------------------------------------------------------------
#pragma hdrstop
#include "uTMyRectangle.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
bool TMyRectangle::IsItPossibleToEnterACircle()
{
TMyPoint b1 = bissect(c1,c2,c4);
TMyPoint b2 = bissect(c4,c1,c3);
TMyPoint o1 = intersect(c1,b1,c4,b2);
b1 = bissect(c2,c1,c3);
b2 = bissect(c3,c2,c4);
TMyPoint o2 = intersect(c2,b1,c3,b2);
return (o1==o2);
}
|
Будут вопросы — будут комменты.... А то у меня сейчас 3:00 ночи
Отредактировано exp — 15.12.2006, 03:00
|
|
exp |
Отправлено: 20.12.2006, 17:56 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
Блин... хоть бы кто спасибо сказал.
|
|
Doga |
Отправлено: 20.12.2006, 18:31 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
QUOTE |
Блин... хоть бы кто спасибо сказал.
|
Так этого, вроде как, никто и не обещал
Разве не достаточно просто ощущения собственной кульности?
P.S. Да и спасибо было сказано, правда, заранее...
Отредактировано Doga — 20.12.2006, 18:33
|
|
exp |
Отправлено: 23.12.2006, 10:33 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
Мдаааа, позор на мои седины . Забыл школьный курс геометрии.
Всё проще
uTMyRectangle.h
CODE |
#ifndef uTMyRectangleH
#define uTMyRectangleH
#include "uTMyPoint.h"
//---------------------------------------------------------------------------
class TMyRectangle
{
public:
TMyPoint c1;
TMyPoint c2;
TMyPoint c3;
TMyPoint c4;
bool IsItPossibleToEnterACircle(); //Перевод от www.translate.ru
};
#endif |
uTMyRectangle.cpp
CODE |
//---------------------------------------------------------------------------
#pragma hdrstop
#include "uTMyRectangle.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
bool TMyRectangle::IsItPossibleToEnterACircle()
{
return ((c2-c1).abs()+(c4-c3).abs())==( (c3-c2).abs()+(c1-c4).abs());
}
|
В четырёхугольник можно вписать окружность, если суммы противоположных сторон равны.
Отредактировано exp — 23.12.2006, 10:33
|
|
|