بدست آوردن بزرگترین مستطیل افقی درون یک دایره - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

بدست آوردن بزرگترین مستطیل افقی درون یک دایره

0 امتیاز
سلام

من می خوام داخل یک دایره متن قرار بدم برای این کار نیاز دارم  بزرگترین دایره افقی داخل این دایره رو بدست بیارم  بعد متن رو بذارم داخل این مستطیل (نقطه مرکز دایره رو دارم )

چجوری این مستطیل رو پیدا کنم ؟
سوال شده آذر 20, 1392  بوسیله ی ایرانی (امتیاز 38)   1 4 6

3 پاسخ

+2 امتیاز
 
بهترین پاسخ

سوالشون مربع نبوده! مستطیل هم که باید Height مشخص شه تا بشه بیشترین Width رو براش مشخص کرد.

برای سینوس 45 هم از عدد ثابت استفاده کنیم نیازی به تابع سینوس نداریم:

tagRECT * GetRectInCycle(
    tagRECT     * pOut,
    const float   radius,
    const int     center_x,
    const int     center_y)
{
#define SIN_45_DEGREE 0.70710678118654752440
    int w = int(radius * SIN_45_DEGREE);
    pOut->left    = center_x - w;
    pOut->top     = center_y - w;
    pOut->right   = center_x + w;
    pOut->bottom  = center_y + w;
    return pOut;
};

 

پاسخ داده شده آذر 23, 1392 بوسیله ی محمد قدیانی (امتیاز 317)   1 9
انتخاب شد دی 2, 1392 بوسیله ی BlueBlade
0 امتیاز

یک بار x ,y رو با pow(2,0.5)*R/2  جمع بزن یک بار هم کم کن گوشه بالا چپ و پایین راست بدست میاد . ( از این رابطه استفاده کردم sin=y/r , زاویه رو هم 45 گرفتم )

مثلا توی Qt این جوری میشه :

void TestItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    painter->drawEllipse(QRectF(1,1,radius_*2,radius_*2));
    float p=(pow(2,0.5)*radius_)/2;
    float mid=1+radius_;
    painter->drawRect(QRectF(QPointF(mid+p,mid+p),QPointF(mid-p,mid-p)));
}

 

عکس خروجی :

پاسخ داده شده آذر 20, 1392 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
ویرایش شده آذر 22, 1392 بوسیله ی BlueBlade
امید کدتو تست کردی؟!!!!
درسته فقط radius_ رو قطر گرفتم بودم نه شعاع !
الان درست شد .
0 امتیاز

با کد زیر می تونید اینکارو انجام بدید.

#define BH_RAD_TO_DEG   180/CV_PI
#define BH_DEG_TO_RAD   CV_PI/180

Point bhGetRadialPoint2(Point center,int radius,float angle)
{
	Point resPoint ;
	resPoint.x =  center.x + static_cast<int>( cos(angle * BH_DEG_TO_RAD) * radius) ;
	resPoint.y = center.y + static_cast<int>(sin(angle * BH_DEG_TO_RAD) * radius) ;

	return resPoint;
}

int main(int argc, char* argv[])
{

	Mat img(500,500,CV_8UC3,Scalar::all(0));
	int radius = 100;
	Point c(100,100);
	circle(img,c,radius,Scalar(0,255,0));
    
	Point new_point = bhGetRadialPoint2(c,radius,45);
	
	int dis = new_point.x - c.x;
    rectangle(img,Rect(c.x-dis,c.y-dis,dis*2,dis*2),Scalar(0,0,255));
	imshow("DDD",img);
	waitKey(0);}

پاسخ داده شده آذر 22, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
...