亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? geometry.cpp

?? 一個(gè)C編寫的足球機(jī)器人比賽程序
?? CPP
?? 第 1 頁 / 共 4 頁
字號(hào):
    // and finally the two intersection points
    x =  p2_x - h * dy;
    y =  p2_y + h * dx;
    p1->setVecPosition( x, y );
    x =  p2_x + h * dy;
    y =  p2_y - h * dx;
    p2->setVecPosition( x, y );
	
    return (arg < 0.0) ? 0 : ((arg == 0.0 ) ? 1 :  2);
}

/*! This method returns the size of the intersection area of two circles.
\param c circle with which intersection should be determined
\return size of the intersection area. */
double Circle::getIntersectionArea( Circle c )
{
	VecPosition pos1, pos2, pos3;
	double d, h, dArea;
	AngDeg ang;
	
	d = getCenter().getDistanceTo( c.getCenter() ); // dist between two centers
	if( d > c.getRadius() + getRadius() )           // larger than sum radii
		return 0.0;                                   // circles do not intersect
	if( d <= fabs(c.getRadius() - getRadius() ) )   // one totally in the other
	{
		double dR = min( c.getRadius(), getRadius() );// return area smallest circ
		return M_PI*dR*dR;
	}
	
	int iNrSol = getIntersectionPoints( c, &pos1, &pos2 );
	if( iNrSol != 2 )
		return 0.0;
	
	// the intersection area of two circles can be divided into two segments:
	// left and right of the line between the two intersection points p1 and p2.
	// The outside area of each segment can be calculated by taking the part
	// of the circle pie excluding the triangle from the center to the
	// two intersection points.
	// The pie equals pi*r^2 * rad(2*ang) / 2*pi = 0.5*rad(2*ang)*r^2 with ang
	// the angle between the center c of the circle and one of the two
	// intersection points. Thus the angle between c and p1 and c and p3 where
	// p3 is the point that lies halfway between p1 and p2.
	// This can be calculated using ang = asin( d / r ) with d the distance
	// between p1 and p3 and r the radius of the circle.
	// The area of the triangle is 2*0.5*h*d.
	
	pos3 = pos1.getVecPositionOnLineFraction( pos2, 0.5 );
	d = pos1.getDistanceTo( pos3 );
	h = pos3.getDistanceTo( getCenter() );
	ang = asin( d / getRadius() );
	
	dArea = ang*getRadius()*getRadius();
	dArea = dArea - d*h;
	
	// and now for the other segment the same story
	h = pos3.getDistanceTo( c.getCenter() );
	ang = asin( d / c.getRadius() );
	dArea = dArea + ang*c.getRadius()*c.getRadius();
	dArea = dArea - d*h;
	
	return dArea;
}


/*****************************************************************************/
/***********************  CLASS LINE *****************************************/
/*****************************************************************************/

/*! This constructor creates a line by given the three coefficents of the line.
A line is specified by the formula ay + bx + c = 0.
\param dA a coefficients of the line
\param dB b coefficients of the line
\param dC c coefficients of the line */
Line::Line( double dA, double dB, double dC )
{
	m_a = dA;
	m_b = dB;
	m_c = dC;
}


/*! This method returns the intersection point between the current Line and
the specified line.
\param line line with which the intersection should be calculated.
\return VecPosition position that is the intersection point. */
VecPosition Line::getIntersection( Line line )
{
	VecPosition pos;
	double x, y;
	if(m_b == 0 || line.getBCoefficient() == 0)
	{
		if(m_b == line.getBCoefficient())
		{
			return pos;  // lines are parallel, no intersection
		}
		else if(m_b == 0)
		{
			y = - m_c / m_a;
			x = line.getXGivenY(y);
		}
		else
		{
			y = - line.getCCoefficient() / line.getACoefficient();
			x = getXGivenY(y);
		}
		return VecPosition( x, y );
	}
	if( ( m_a / m_b ) ==  (line.getACoefficient() / line.getBCoefficient() ))
		return pos; // lines are parallel, no intersection
	if( m_a == 0 )            // bx + c = 0 and a2*y + b2*x + c2 = 0 ==> x = -c/b
	{                          // calculate x using the current line
		x = -m_c/m_b;                // and calculate the y using the second line
		y = line.getYGivenX(x);
	}
	else if( line.getACoefficient() == 0 )
	{                         // ay + bx + c = 0 and b2*x + c2 = 0 ==> x = -c2/b2
		x = -line.getCCoefficient()/line.getBCoefficient(); // calculate x using
		y = getYGivenX(x);       // 2nd line and calculate y using current line
	}
	// ay + bx + c = 0 and a2y + b2*x + c2 = 0
	// y = (-b2/a2)x - c2/a2
	// bx = -a*y - c =>  bx = -a*(-b2/a2)x -a*(-c2/a2) - c ==>
	// ==> a2*bx = a*b2*x + a*c2 - a2*c ==> x = (a*c2 - a2*c)/(a2*b - a*b2)
	// calculate x using the above formula and the y using the current line
	else
	{
		x = (m_a*line.getCCoefficient() - line.getACoefficient()*m_c)/
			(line.getACoefficient()*m_b - m_a*line.getBCoefficient());
		y = getYGivenX(x);
	}
	
	return VecPosition( x, y );
}


/*! This method calculates the intersection points between the current line
and the circle specified with as center 'posCenter' and radius 'dRadius'.
The number of solutions are returned and the corresponding points are put
in the third and fourth argument of the method
\param c circle with which intersection points should be found
\param posSolution1 first intersection (if any)
\param posSolution2 second intersection (if any) */
int Line::getCircleIntersectionPoints( Circle circle,
									  VecPosition *posSolution1, VecPosition *posSolution2 )
{
	int    iSol;
	double dSol1=0, dSol2=0;
	double h = circle.getCenter().getX();
	double k = circle.getCenter().getY();
	
	// line:   x = -c/b (if a = 0)
	// circle: (x-h)^2 + (y-k)^2 = r^2, with h = center.x and k = center.y
	// fill in:(-c/b-h)^2 + y^2 -2ky + k^2 - r^2 = 0
	//         y^2 -2ky + (-c/b-h)^2 + k^2 - r^2 = 0
	// and determine solutions for y using abc-formula
	if( fabs(m_a) < EPSILON )
	{
		iSol = Geometry::abcFormula( 1, -2*k, ((-m_c/m_b) - h)*((-m_c/m_b) - h)
			+ k*k - circle.getRadius()*circle.getRadius(), &dSol1, &dSol2);
		posSolution1->setVecPosition( (-m_c/m_b), dSol1 );
		posSolution2->setVecPosition( (-m_c/m_b), dSol2 );
		return iSol;
	}
	
	// ay + bx + c = 0 => y = -b/a x - c/a, with da = -b/a and db = -c/a
	// circle: (x-h)^2 + (y-k)^2 = r^2, with h = center.x and k = center.y
	// fill in:x^2 -2hx + h^2 + (da*x-db)^2 -2k(da*x-db) + k^2 - r^2 = 0
	//         x^2 -2hx + h^2 + da^2*x^2 + 2da*db*x + db^2 -2k*da*x -2k*db
	//                                                         + k^2 - r^2 = 0
	//       (1+da^2)*x^2 + 2(da*db-h-k*da)*x + h2 + db^2  -2k*db + k^2 - r^2 = 0
	// and determine solutions for x using abc-formula
	// fill in x in original line equation to get y coordinate
	double da = -m_b/m_a;
	double db = -m_c/m_a;
	
	double dA = 1 + da*da;
	double dB = 2*( da*db - h - k*da );
	double dC = h*h + db*db-2*k*db + k*k - circle.getRadius()*circle.getRadius();
	
	iSol = Geometry::abcFormula( dA, dB, dC, &dSol1, &dSol2 );
	
	posSolution1->setVecPosition( dSol1, da*dSol1 + db );
	posSolution2->setVecPosition( dSol2, da*dSol2 + db );
	return iSol;
	
}

/*! This method returns the tangent line to a VecPosition. This is the line
between the specified position and the closest point on the line to this
position.
\param pos VecPosition point with which tangent line is calculated.
\return Line line tangent to this position */
Line Line::getTangentLine( VecPosition pos )
{
	// ay + bx + c = 0 -> y = (-b/a)x + (-c/a)
	// tangent: y = (a/b)*x + C1 -> by - ax + C2 = 0 => C2 = ax - by
	// with pos.y = y, pos.x = x
	return Line( m_b, -m_a, m_a*pos.getX() - m_b*pos.getY() );
}

/*! This method returns the closest point on a line to a given position.
\param pos point to which closest point should be determined
\return VecPosition closest point on line to 'pos'. */
VecPosition Line::getPointOnLineClosestTo( VecPosition pos )
{
	Line l2 = getTangentLine( pos );  // get tangent line
	return getIntersection( l2 );     // and intersection between the two lines
}

/*! This method returns the distance between a specified position and the
closest point on the given line.
\param pos position to which distance should be calculated
\return double indicating the distance to the line. */
double Line::getDistanceWithPoint( VecPosition pos )
{
	return pos.getDistanceTo( getPointOnLineClosestTo( pos ) );
}

/*! This method determines whether the projection of a point on the
current line lies between two other points ('point1' and 'point2')
that lie on the same line.

  \param pos point of which projection is checked.
  \param point1 first point on line
  \param point2 second point on line
\return true when projection of 'pos' lies between 'point1' and 'point2'.*/
bool Line::isInBetween( VecPosition pos, VecPosition point1,VecPosition point2)
{
	pos          = getPointOnLineClosestTo( pos ); // get closest point
	double dDist = point1.getDistanceTo( point2 ); // get distance between 2 pos
	
	// if the distance from both points to the projection is smaller than this
	// dist, the pos lies in between.
	return pos.getDistanceTo( point1 ) <= dDist &&
		pos.getDistanceTo( point2 ) <= dDist;
}

/*! This method calculates the y coordinate given the x coordinate
\param x coordinate
\return y coordinate on this line */
double Line::getYGivenX( double x )
{
	if( m_a == 0 )
	{
		return 0;
	}
	// ay + bx + c = 0 ==> ay = -(b*x + c)/a
	return -(m_b*x+m_c)/m_a;
}

/*! This method calculates the x coordinate given the x coordinate
\param y coordinate
\return x coordinate on this line */
double Line::getXGivenY( double y )
{
	if( m_b == 0 )
	{
		cerr << "(Line::getXGivenY) Cannot calculate X coordinate\n" ;
		return 0;
	}
	// ay + bx + c = 0 ==> bx = -(a*y + c)/a
	return -(m_a*y+m_c)/m_b;
}

/*! This method creates a line given two points.
\param pos1 first point
\param pos2 second point
\return line that passes through the two specified points. */
Line Line::makeLineFromTwoPoints( VecPosition pos1, VecPosition pos2 )
{
	// 1*y + bx + c = 0 => y = -bx - c
	// with -b the direction coefficient (or slope)
	// and c = - y - bx
	double dA, dB, dC;
	double dTemp = pos2.getX() - pos1.getX(); // determine the slope
	if( fabs(dTemp) < EPSILON )
	{
		// ay + bx + c = 0 with vertical slope=> a = 0, b = 1
		dA = 0.0;
		dB = 1.0;
	}
	else
	{
		// y = (-b)x -c with -b the slope of the line
		dA = 1.0;
		dB = -(pos2.getY() - pos1.getY())/dTemp;
	}
	// ay + bx + c = 0 ==> c = -a*y - b*x
	dC =  - dA*pos2.getY()  - dB * pos2.getX();
	return Line( dA, dB, dC );
}

/*! This method creates a line given a position and an angle.
\param vec position through which the line passes
\param angle direction of the line.
\return line that goes through position 'vec' with angle 'angle'. */
Line Line::makeLineFromPositionAndAngle( VecPosition vec, AngDeg angle )
{
	// calculate point somewhat further in direction 'angle' and make
	// line from these two points.
	return makeLineFromTwoPoints( vec, vec+VecPosition(1,angle,POLAR));
}

/*! This method returns the a coefficient from the line ay + bx + c = 0.
\return a coefficient of the line. */
double Line::getACoefficient() const
{
	return m_a;
}

/*! This method returns the b coefficient from the line ay + bx + c = 0.
\return b coefficient of the line. */
double Line::getBCoefficient() const
{
	return m_b;
}

/*! This method returns the c coefficient from the line ay + bx + c = 0.
\return c coefficient of the line. */
double Line::getCCoefficient() const
{
	return m_c;
}

/*****************************************************************************/
/********************* CLASS RECTANGLE ***************************************/
/*****************************************************************************/

/*! This is the constructor of a Rectangle. Two points will be given. The
order does not matter as long as two opposite points are given (left
top and right bottom or right top and left bottom).
\param pos first point that defines corner of rectangle
\param pos2 second point that defines other corner of rectangle
\return rectangle with 'pos' and 'pos2' as opposite corners. */
Rect::Rect( VecPosition pos, VecPosition pos2 )
{
	setRectanglePoints( pos, pos2 );
}

/*! This method sets the upper left and right bottom point of the current
rectangle.
\param pos first point that defines corner of rectangle
\param pos2 second point that defines other corner of rectangle */
void Rect::setRectanglePoints( VecPosition pos1, VecPosition pos2 )
{
	m_posLeftTop.setX    ( max( pos1.getX(), pos2.getX() ) );
	m_posLeftTop.setY    ( min( pos1.getY(), pos2.getY() ) );
	m_posRightBottom.setX( min( pos1.getX(), pos2.getX() ) );
	m_posRightBottom.setY( max( pos1.getY(), pos2.getY() ) );
}

/*! This method determines whether the given position lies inside the current
rectangle.
\param pos position which is checked whether it lies in rectangle
\return true when 'pos' lies in the rectangle, false otherwise */
bool Rect::isInside( VecPosition pos )
{
	return pos.isBetweenX( m_posRightBottom.getX(), m_posLeftTop.getX() ) &&
		pos.isBetweenY( m_posLeftTop.getY(),     m_posRightBottom.getY() );
	
}

/*! This method sets the top left position of the rectangle
\param pos new top left position of the rectangle
\return true when update was successful */
bool Rect::setPosLeftTop( VecPosition pos )
{
	m_posLeftTop = pos;
	return true;
}

/*! This method returns the top left position of the rectangle
\return top left position of the rectangle */
VecPosition Rect::getPosLeftTop(  )
{
	return m_posLeftTop;
}

/*! This method sets the right bottom position of the rectangle
\param pos new right bottom position of the rectangle
\return true when update was successful */
bool Rect::setPosRightBottom( VecPosition pos )
{
	m_posRightBottom = pos;
	return true;
}

/*! This method returns the right bottom position of the rectangle
\return top right bottom of the rectangle */
VecPosition Rect::getPosRightBottom(  )
{
	return m_posRightBottom;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合激情小说| 精品一区二区三区免费观看 | 99在线精品观看| 国产伦精品一区二区三区免费| 午夜久久久久久| 日韩精品久久久久久| 无吗不卡中文字幕| 亚洲精品网站在线观看| 亚洲精品福利视频网站| 亚洲在线视频免费观看| 一区二区视频免费在线观看| 一区二区三区丝袜| 亚洲电影第三页| 激情综合五月天| 91香蕉视频黄| 欧美日韩一本到| 日韩精品自拍偷拍| 久久你懂得1024| 亚洲精品亚洲人成人网| 亚洲三级在线观看| 日韩av电影天堂| 国产精品一区二区久久精品爱涩 | 99精品久久免费看蜜臀剧情介绍| 懂色av一区二区夜夜嗨| 国产精品夜夜爽| 在线一区二区三区四区| 欧美一级精品大片| 中文字幕不卡在线观看| 亚洲电影视频在线| 国产欧美一区二区三区网站| 综合欧美一区二区三区| 麻豆精品久久精品色综合| 国产91丝袜在线观看| 91麻豆文化传媒在线观看| 欧美一区三区二区| 最新不卡av在线| 麻豆精品视频在线观看视频| 国产成人免费视频精品含羞草妖精| 成人黄页毛片网站| 日韩一卡二卡三卡四卡| 亚洲欧洲制服丝袜| 国产一区二区免费在线| 91精品免费在线| 亚洲精品视频免费看| 国产jizzjizz一区二区| 欧美男人的天堂一二区| 亚洲免费伊人电影| 成人动漫在线一区| 精品国产凹凸成av人导航| 亚洲丝袜另类动漫二区| 国产麻豆精品一区二区| 欧美男人的天堂一二区| 亚洲成人在线免费| 欧美日韩国产a| 一区二区三区 在线观看视频| 奇米精品一区二区三区四区| 色久综合一二码| 亚洲天堂免费看| 91香蕉视频污| 亚洲欧美在线aaa| 欧洲国内综合视频| 日韩激情在线观看| 这里只有精品免费| 激情欧美一区二区三区在线观看| 久久久久99精品一区| 另类的小说在线视频另类成人小视频在线| 欧美日韩国产综合一区二区| 亚洲精品菠萝久久久久久久| 成人深夜视频在线观看| 亚洲一区在线观看视频| 欧美一级久久久| 成人激情综合网站| 亚洲国产cao| 欧美精品一区二区三区久久久| 蜜桃一区二区三区四区| 欧美国产一区二区| 在线日韩一区二区| 九九九久久久精品| 日韩一区在线免费观看| 欧美一卡在线观看| 懂色av中文字幕一区二区三区| 国产午夜精品一区二区三区四区| 99riav一区二区三区| 石原莉奈在线亚洲三区| 国产三级精品三级在线专区| 在线观看欧美黄色| 国产精品18久久久久| 图片区小说区国产精品视频| 欧美激情一区二区三区不卡| 欧美日韩高清一区二区| www.亚洲在线| 久久国产精品99久久久久久老狼| 国产精品国产三级国产aⅴ原创| 91.成人天堂一区| 色老汉一区二区三区| 大胆欧美人体老妇| 激情久久五月天| 日韩**一区毛片| 亚洲欧美aⅴ...| 亚洲人一二三区| 中文一区二区在线观看| 2020国产成人综合网| 91精品国产乱| 制服丝袜亚洲播放| 欧美视频精品在线观看| 在线一区二区观看| 91香蕉视频污| 91色porny在线视频| 成人高清视频在线| 成人综合在线视频| 91在线国产福利| 99久久伊人网影院| 成人精品视频.| 国内不卡的二区三区中文字幕| 日韩专区一卡二卡| 美女一区二区在线观看| 麻豆精品一区二区三区| 久久99在线观看| 国产综合色在线视频区| 国产在线观看免费一区| 丰满白嫩尤物一区二区| 成人在线综合网站| caoporn国产精品| aaa国产一区| 91首页免费视频| 欧美在线free| 欧美精品一区二区三区在线| 欧美变态口味重另类| 亚洲国产成人在线| 亚洲一区精品在线| 国产精品正在播放| 91看片淫黄大片一级| 欧美人狂配大交3d怪物一区| 日韩精品一区二区三区老鸭窝| 国产亚洲美州欧州综合国| 国产精品成人在线观看| 舔着乳尖日韩一区| 国产成人av网站| 色综合天天视频在线观看 | 久久激情综合网| 94-欧美-setu| 久久久久久久免费视频了| 亚洲女同一区二区| 精久久久久久久久久久| 欧洲一区二区三区在线| 精品国产凹凸成av人网站| 亚洲一区二区四区蜜桃| 久久亚洲精品国产精品紫薇| 欧美精品一区二区不卡| 欧美午夜精品久久久久久孕妇| 国产喷白浆一区二区三区| 久久久青草青青国产亚洲免观| 欧美色图天堂网| 欧美在线色视频| 国产午夜亚洲精品羞羞网站| 亚洲在线视频免费观看| 9i在线看片成人免费| 国产视频一区不卡| 国产一区二区三区美女| 欧美日韩精品福利| 亚洲一二三区在线观看| 懂色一区二区三区免费观看| 欧美一区二区三区男人的天堂| 日本一区二区三区四区 | 日韩在线a电影| 欧美色成人综合| 亚洲国产精品自拍| 在线观看国产一区二区| 亚洲男人的天堂av| 在线影视一区二区三区| 国产精品美女久久久久久久| 五月天一区二区| 日韩一区二区影院| 蜜臀久久99精品久久久画质超高清 | 91丨九色porny丨蝌蚪| 亚洲人被黑人高潮完整版| 欧洲一区二区三区在线| 男女男精品网站| 欧美国产综合一区二区| 色婷婷久久久亚洲一区二区三区| 亚洲一区二区视频在线| 日韩欧美在线观看一区二区三区| 国产精品亚洲第一| 亚洲午夜精品在线| 久久精品视频网| 欧美日韩aaaaa| 91丨porny丨国产| 国产一区在线视频| 婷婷激情综合网| 亚洲欧美偷拍卡通变态| 精品免费国产二区三区| 欧美三区在线视频| av高清久久久| 国产精品一区二区91| 日韩和欧美一区二区| 亚洲色图另类专区| 国产精品免费aⅴ片在线观看| 日韩无一区二区| 欧美三级电影一区| 91国在线观看|