PDA

Просмотр полной версии : [Вопрос] небольшая математика



Batya_Montes
18.05.2017, 07:56
MinY
v
MinX > *-------------
| |
| gangzone |
| center |
| |
-------------* < MaxX
^
MaxY
имея gangzone center и радиус необходимого прямоугольника возможно ли вычислить координаты минимума и максимума ?
если да, то по какой формуле ;)

vovandolg
18.05.2017, 08:04
прямоугольника наврятли, а квадрата вроде бы можно как то...

Seregamil
18.05.2017, 10:31
MinY
v
MinX > *-------------
| |
| gangzone |
| center |
| |
-------------* < MaxX
^
MaxY
имея gangzone center и радиус необходимого прямоугольника возможно ли вычислить координаты минимума и максимума ?
если да, то по какой формуле ;)

Зная один "радиус" ты построишь квадрат, не более.
А вообще, если ты знаешь длину и ширину, то в чем проблема узнать то?

Alpano
18.05.2017, 10:36
new AreaID;
AreaID = CreateDynamicRectangle(minx,miny,maxx,maxy,-1,-1,-1);
IsPlayerInDynamicArea(playerid, AreaID);
учитесь пользоваться всеми функциями стримера.

vovandolg
18.05.2017, 10:40
new AreaID;
AreaID = CreateDynamicRectangle(minx,miny,maxx,maxy,-1,-1,-1);
IsPlayerInDynamicArea(playerid, AreaID);
учитесь пользоваться всеми функциями стримера.

Как раз таки мэн просит вычислить minx,miny,maxx,maxy из своей точки и радиуса вокруг неё))

Seregamil
18.05.2017, 10:43
/*

maxY
v a
maxX > *-------------
| |
| gangzone |
b | center |
| |
-------------* < minX
^
minY

*/

main()
{
new
Float: centerX = 0.0,
Float: centerY = 0.0 ;

new
Float: a = 50.0,
Float: b = 27.0 ;

new
Float: minX = centerX - ( a / 2 ),
Float: minY = centerY - ( b / 2 ),

Float: maxX = centerX + ( a / 2 ),
Float: maxY = centerY + ( b / 2 ) ;


printf( "(%f, %f)\n(%f, %f)", minX, minY, maxX, maxY );

}

Зная длину и ширину можно вычислить таким образом.
a и b это длина и ширина

vovandolg
18.05.2017, 10:49
/*

maxY
v a
maxX > *-------------
| |
| gangzone |
b | center |
| |
-------------* < minX
^
minY

*/

main()
{
new
Float: centerX = 0.0,
Float: centerY = 0.0 ;

new
Float: a = 50.0,
Float: b = 27.0 ;

new
Float: minX = centerX - ( a / 2 ),
Float: minY = centerY - ( b / 2 ),

Float: maxX = centerX + ( a / 2 ),
Float: maxY = centerY + ( b / 2 ) ;


printf( "(%f, %f)\n(%f, %f)", minX, minY, maxX, maxY );

}

Зная длину и ширину можно вычислить таким образом.
a и b это длина и ширина

Занеси этот код в раздел функций по братски)) пригодится ещё может, а то потеряю потом..

Nexius_Tailer
18.05.2017, 11:06
Элементарно же.
Вот готовая функция:

GetBoundsOfGangZone(Float:cx, Float:cy, Float:width, Float:height, &Float:x1, &Float:y1, &Float:x2, &Float:y2)
{
x1 = cx - (width / 2.0);
x2 = cx + (width / 2.0);
y1 = cy - (height / 2.0);
y2 = cy + (height / 2.0);
}

Ну и заодно обратна функция, которая узнаёт центр:


GetCenterOfGangZone(Float:MinX, Float:MinY, Float:MaxX, Float:MaxY, &Float:X, &Float:Y)
{
X = (MinX + MaxX) / 2;
Y = (MinY + MaxY) / 2;
}

Batya_Montes
18.05.2017, 15:53
Всем спасибо, выручили.