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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dyx_point.cpp

?? 這里提供一套C++的point定義類,里面有豐富的成員函數,全部通過驗證。同時也望朋友們對其進行擴充和改進
?? CPP
字號:
#include "StdAfx.h"
#include <math.h>
#include "DYX_Point.h"
#include "DYX_Vector.h"
#include "DYX_LineCircle.h"
#include "DYX_Math.h"
#include "DYX_MeshDefinition.h"


#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif



//-------------------------------------
//	Implementation of Class Point2D 
//-------------------------------------

void Point2D::operator=(const Point2D &P)
{
	this->x = P.x;
	this->y = P.y;
}


BOOL Point2D::operator==(const Point2D &P) const
{
	if(fabs(this->x-P.x) < MEAN_ERR && fabs(this->y-P.y) < MEAN_ERR)
		return TRUE;
	else
		return FALSE;
}


BOOL Point2D::operator!=(const Point2D &P) const
{
	if(fabs(this->x-P.x) >= MEAN_ERR || fabs(this->y-P.y) >= MEAN_ERR)
		return TRUE;
	else
		return FALSE;
}


Point2D Point2D::operator+(const Point2D &P) const
{
	Point2D Pt;
	
	Pt.x = this->x + P.x;
	Pt.y = this->y + P.y;

	return Pt;
}


Point2D Point2D::operator-(const Point2D &P) const
{
	Point2D Pt;
	
	Pt.x = this->x - P.x;
	Pt.y = this->y - P.y;

	return Pt;
}


void Point2D::SetPoint(const double x1, const double y1)
{
	this->x = x1;
	this->y = y1;
}


void Point2D::SetPoint(const double Pt[2])
{
	this->x = Pt[0];
	this->y = Pt[1];
}


void Point2D::SetPoint(const Point2D Pt)
{
	this->x = Pt.x;
	this->y = Pt.y;
}


double Point2D::Multiply(const Point2D &P, const Point2D &Q) const
{ 
//	r = Multiply(P,Q), 得到(P-O)*(Q-O)的叉積 
//	r>0 : Q在矢量OP的逆時針方向; 
//	r=0 : op->P->Q 三點共線; 
//	r<0 : Q在矢量OP的順時針方向 

	return ((P.x-this->x)*(Q.y-this->y)-(Q.x-this->x)*(P.y-this->y)); 
} 


double Point2D::dotMultiply(const Point2D &P, const Point2D &Q) const
{ 
// ---------------------------------------------------------------------------
//	O為當前點,r=dotMultiply(P,Q),得到矢量(P-O)和(Q-O)的點積,如果兩個矢量都非零矢量 
//	r<0:兩矢量夾角為銳角;
//	r=0:兩矢量夾角為直角;
//	r>0:兩矢量夾角為鈍角 
//------------------------------------------------------------------------------ 

	return ((P.x-this->x)*(Q.x-this->x)+(P.y-this->y)*(Q.y-this->y)); 
} 


void Point2D::Move(const double x1, const double y1)
{
	this->x += x1;
	this->y += y1;
}


double Point2D::Distance(const Point2D &P) const
{
//	返回兩點之間歐氏距離 
	
	return sqrt((P.x-this->x)*(P.x-this->x)+(P.y-this->y)*(P.y-this->y)); 
}


double Point2D::Distance(const LineSeg2D &L) const
{ 
//	求當前點到線段L所在直線的最短距離

	return fabs(L.sp.Multiply(*this, L.ep)) / L.Distance(); 
} 



void Point2D::Rotate(const Point2D &RotateCenter, const double dAngle)
{ 
//	返回當前點以點Cent為圓心逆時針旋轉dAngle(單位:弧度)后所在的位置

	double x1 = this->x - RotateCenter.x; 
	double y1 = this->y - RotateCenter.y; 

	this->x = x1*cos(dAngle) - y1*sin(dAngle) + RotateCenter.x; 
	this->y = y1*cos(dAngle) + x1*sin(dAngle) + RotateCenter.y; 
} 


BOOL Point2D::IsEqualTo(const Point2D &P, const double Tol) const
{ 
//	判斷兩個點是否重合  

	return ( (fabs(P.x-this->x) < Tol) && (fabs(P.y-this->y) < Tol) ); 
} 


BOOL Point2D::OnLineSeg(const LineSeg2D &L) const
{ 
//	設點為Q,線段為P1P2 ,判斷點Q在該線段上的依據是:( Q - P1 ) × ( P2 - P1 ) = 0 
//	且 Q 在以 P1,P2為對角頂點的矩形內。前者保證Q點在直線P1P2上,
//	后者是保證Q點不在線段P1P2的延長線或反向延長線上。
 
	return ( fabs(Multiply(L.sp, L.ep)) < EPS && 
			 (this->x-L.sp.x)*(this->x-L.ep.x) <= 0.0 && 
			 (this->y-L.sp.y)*(this->y-L.ep.y) <= 0.0 ); 
} 



double Point2D::Angle(const Point2D &B) const
{
//	返回頂角在當前點A,終點在B的有向線段與X軸正向的夾角。
//	角度小于PI,返回正值 
//	角度大于PI,返回負值 

	Vector2D Vt(B.x-this->x, B.y-this->y); 
	return Vt.Angle();
} 



double Point2D::Angle(const Point2D &B, const Point2D &C) const
{
//	返回頂角在當前點A,起始邊為AB,終止邊為AC的夾角(單位:弧度) 
//	角度小于PI,返回正值 
//	角度大于PI,返回負值 
//
//	可以用于求線段之間的夾角 
//
//	We define the angle theta between two vectors v and w by the formula
//                      v . w           
//        cos Q  =  --------------               
//                    ||v|| ||w|| 
//	so that
//         v . w = ||v|| ||w|| cos Q

	double x1 = B.x - this->x; 
	double y1 = B.y - this->y; 
	double x2 = C.x - this->x; 
	double y2 = C.y - this->y; 

	double cosAngle = x1*x2 + y1*y2; 
	double norm = (x1*x1+y1*y1) * (x2*x2+y2*y2); 
	cosAngle /= sqrt( norm ); 

	if (cosAngle >=  1.0-EPS ) 
		return 0.0; 
	if (cosAngle <= -1.0+EPS ) 
		return PI; 

	double dAngle = acos(cosAngle); 
	if (x1*y2-y1*x2 < 0.0)
		return (-dAngle);		// 說明矢量AO->BO為順時針方向 
	else						// 說明矢量AO->BO為逆時針方向 
		return dAngle; 
} 


double Point2D::TriangleAngle(const Point2D &B, const Point2D &C) const
{
//	三角形余玄定理:a^2=b^2+c^2-2bcCOS(Angle)。
//	a, b, c為邊長,Angle為BC兩條線間的夾角。
//	返回值在0->PI之間。

	double a2 = (B.x-C.x)*(B.x-C.x) + (B.y-C.y)*(B.y-C.y);
	double b2 = (this->x-C.x)*(this->x-C.x) + (this->y-C.y)*(this->y-C.y);
	double c2 = (this->x-B.x)*(this->x-B.x) + (this->y-B.y)*(this->y-B.y);

	if(a2 < MEAN_ERR || b2 < MEAN_ERR || c2 < MEAN_ERR)
	{
		::AfxMessageBox(_T("The three points are colliear."));
		return 0.0;
	}

	double cosAngle = (b2+c2-a2) / (2.0*sqrt(b2*c2));
	if(cosAngle >= 1.0-EPS)
		return 0.0;
	else if(cosAngle <= EPS-1.0)
		return PI;
	else
		return acos(cosAngle);
}


double Point2D::TriangleArea(const Point2D &B, const Point2D &C) const
{
//	To obtain the directional area of triangle.
//	area > 0.0 if A->B->C are counter-clockwise; 
//	area < 0.0 if A->B->C are clockwise;
//	area == 0 if A, B and C are colliear.

	return (0.5*((B.x-this->x)*(C.y-this->y) - (C.x-this->x)*(B.y-this->y)));
}



double Point2D::Relation(const LineSeg2D &L) const
{
//	本函數是根據下面的公式寫的,P是點C到線段AB所在直線的垂足 
//
//                AC dot AB 
//        r =     --------- 
//                 ||AB||^2 
//
//             (Cx-Ax)(Bx-Ax) + (Cy-Ay)(By-Ay) 
//          = ------------------------------- 
//                          L^2 
//
//    r has the following meaning: 
//
//        r=0		P = A 
//        r=1		P = B 
//        r<0		P is on the backward extension of AB 
//		  r>1		P is on the forward extension of AB 
//        0<r<1		P is interior to AB 

	double dot = L.sp.dotMultiply(*this, L.ep);
	double dist = L.Distance();

	return dot / (dist*dist); 
} 


Point2D Point2D::Perpendicular(const LineSeg2D &L) const
{ 
// 求點C到線段AB所在直線的垂足 P 

	double r = this->Relation(L); 

	Point2D tmpPt; 

	tmpPt.x = L.sp.x + r*(L.ep.x-L.sp.x); 
	tmpPt.y = L.sp.y + r*(L.ep.y-L.sp.y); 

	return tmpPt; 
} 


double Point2D::NearestDistance(const LineSeg2D &L, Point2D &P) const
{ 
// -------------------------------------------------
//	求當前點到線段L的最短距離,并返回線段上距該點最近的點Pt 
//	注意:Pt是線段L上到當前點最近的點,不一定是垂足
//----------------------------------------------------
	double r = this->Relation(L); 
	if(r < 0.0) 
	{ 
		P = L.sp; 
		return this->Distance(L.sp); 
	} 
	if(r > 1.0) 
	{ 
		P = L.ep; 
		return this->Distance(L.ep); 
	} 

	P = this->Perpendicular(L); 
	return this->Distance(P); 
} 
 

void Point2D::TangentialPoint(const Circle2D &Cir, Point2D &P1, Point2D &P2) const
{ 
//  求通過當前點到給定圓的切點。 
//	p---圓心坐標, r---圓半徑, sp---圓外一點, Pt1,Pt2---切點坐標 

	Circle2D tmpCir;

	tmpCir.x = (Cir.x+this->x) / 2.0; 
	tmpCir.y = (Cir.y+this->y) / 2.0; 

	double dx2 = tmpCir.x-Cir.x; 
	double dy2 = tmpCir.y-Cir.y; 

	tmpCir.r = sqrt(dx2*dx2+dy2*dy2); 

	tmpCir.Intersect(Cir, P1, P2); 
}


 
Point2D Point2D::Symmetry(const Line2D &L) const
{ 
// 求當前點關于直線L的對稱點 

	Point2D tmpPt; 
	
	tmpPt.x=((L.b*L.b-L.a*L.a)*x-2*L.a*L.b*y-2*L.a*L.c)/(L.a*L.a+L.b*L.b); 
	tmpPt.y=((L.a*L.a-L.b*L.b)*y-2*L.a*L.b*x-2*L.b*L.c)/(L.a*L.a+L.b*L.b); 
	
	return tmpPt; 
}


BOOL Point2D::Inside(const Circle2D &Cir) const
{ 
//	當前點在圓內(包括邊界)時,返回true 
	
	double d2 = (this->x-Cir.x)*(this->x-Cir.x)+(this->y-Cir.y)*(this->y-Cir.y); 
	double r2 = Cir.r*Cir.r;

	if(d2 <= r2)
		return TRUE;
	else
		return FALSE;
}


BOOL Point2D::Inside(const MyRectangle &Rect, const double dGap) const
{
//	當前點在矩形內部(包括邊界)時,返回true 

	MyRectangle tmpRect(Rect);
	Point2D tmpPt(*this);

	double rotAngle = -tmpRect.RotateAngle;
	if(fabs(rotAngle) > EPS)
	{
		tmpRect.Rotate(tmpRect.LowLeft, rotAngle);
		tmpPt.Rotate(tmpRect.LowLeft, rotAngle);
	}

	double x1 = tmpRect.LowLeft.x + dGap;
	double y1 = tmpRect.LowLeft.y + dGap;
	double x2 = tmpRect.LowLeft.x + tmpRect.Width - dGap;
	double y2 = tmpRect.LowLeft.y + tmpRect.Length - dGap;

	if( x1 <= tmpPt.x && tmpPt.x <= x2 &&
		y1 <= tmpPt.y && tmpPt.y <= y2 )
		return TRUE;
	else
		return FALSE;
}



//-------------------------------------
//	Implementation of Class Point3D 
//-------------------------------------
void Point3D::operator=(const Point3D &P)
{
	this->x = P.x;
	this->y = P.y;
	this->z = P.z;
}


BOOL Point3D::operator==(const Point3D &P) const
{
	if( fabs(this->x-P.x) < MEAN_ERR && 
		fabs(this->y-P.y) < MEAN_ERR &&
		fabs(this->z-P.z) < MEAN_ERR )
		return TRUE;
	else
		return FALSE;
}


BOOL Point3D::operator!=(const Point3D &P) const
{
	if( fabs(this->x-P.x) >= MEAN_ERR || 
		fabs(this->y-P.y) >= MEAN_ERR ||
		fabs(this->z-P.z) >= MEAN_ERR )
		return TRUE;
	else
		return FALSE;
}


Point3D Point3D::operator+(const Point3D &P) const
{
	Point3D tmpPt;
	
	tmpPt.x = this->x + P.x;
	tmpPt.y = this->y + P.y;
	tmpPt.z = this->y + P.z;

	return tmpPt;
}


Point3D Point3D::operator-(const Point3D &P) const
{
	Point3D tmpPt;
	
	tmpPt.x = this->x - P.x;
	tmpPt.y = this->y - P.y;
	tmpPt.z = this->z - P.z;

	return tmpPt;
}


void Point3D::SetPoint(const double x1, const double y1, const double z1)
{
	this->x = x1;
	this->y = y1;
	this->z = z1;
}


void Point3D::SetPoint(const double Pt[3])
{
	this->x = Pt[0];
	this->y = Pt[1];
	this->z = Pt[2];
}


double Point3D::Distance(const Point3D &P) const
{
//	返回兩點之間歐氏距離 

	return sqrt((P.x-this->x)*(P.x-this->x) + (P.y-this->y)*(P.y-this->y) + (P.z-this->z)*(P.z-this->z)); 
}


void MyTest(void)
{
	Point2D P1(0, 0);
	MyRectangle Rect(P1, 4, 2);

	Point2D P2(-1, 2);
	Circle2D Cir(P2, 0.5);

	BOOL bFlag = Cir.Inside(Rect);

	Rect.Rotate(Rect.LowLeft, 90.0*DEG_To_RAD);
	bFlag = Cir.Inside(Rect);

	Rect.Offset(0.5);

//	TCHAR text[80];
//	_stprintf(text, _T("%lf\t%lf"), inPt.x, inPt.y);
//	str += text;

//	::AfxMessageBox(str);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品精品国产高清a毛片牛牛| 国产99一区视频免费| 欧美午夜精品一区| 夜夜操天天操亚洲| 欧美人狂配大交3d怪物一区| 亚洲影视在线播放| 91精品综合久久久久久| 久久99这里只有精品| 26uuuu精品一区二区| 高清在线不卡av| 亚洲欧美激情视频在线观看一区二区三区| 91亚洲精品久久久蜜桃网站| 依依成人精品视频| 欧美乱熟臀69xxxxxx| 男男成人高潮片免费网站| 26uuu色噜噜精品一区二区| 国产**成人网毛片九色| 亚洲一区二区欧美激情| 日韩视频国产视频| 成人高清在线视频| 性久久久久久久久| 久久伊人蜜桃av一区二区| 99精品视频在线播放观看| 亚洲一区二区三区四区的| 欧美videos中文字幕| 成人黄色小视频在线观看| 亚洲一区二区免费视频| 精品卡一卡二卡三卡四在线| 91一区二区三区在线播放| 天堂av在线一区| 亚洲国产岛国毛片在线| 欧美精品日韩一本| 成人激情校园春色| 九一久久久久久| 日韩毛片高清在线播放| 欧美不卡一二三| 在线观看日韩毛片| 国产精品一二三四五| 亚洲综合自拍偷拍| 中文字幕第一区二区| 欧美电影影音先锋| 91视频观看免费| 九九**精品视频免费播放| 亚洲欧美怡红院| 久久亚洲精品国产精品紫薇| 欧美日韩在线直播| 99国产精品国产精品久久| 国产一区二区三区四区五区美女| 亚洲一区二区三区在线| 成人欧美一区二区三区黑人麻豆 | 欧美国产成人在线| 欧美一二三四在线| 欧美性极品少妇| 99久免费精品视频在线观看| 国产另类ts人妖一区二区| 免费国产亚洲视频| 亚洲国产另类av| 一区二区三区四区激情| 国产精品久久影院| 国产婷婷色一区二区三区| 欧美成人免费网站| 欧美一区午夜视频在线观看| 欧美色视频在线观看| 色综合久久88色综合天天| 成人伦理片在线| 日韩精品一区二区三区视频| 色综合天天综合色综合av | 欧美美女黄视频| 欧美亚洲日本一区| 日本二三区不卡| 色婷婷综合久色| 色综合一区二区| 99久久er热在这里只有精品66| 成人午夜私人影院| 高清成人免费视频| 成人午夜在线视频| av电影在线不卡| 91美女片黄在线观看91美女| 91视频.com| 欧美日韩视频在线观看一区二区三区| 欧美性videosxxxxx| 欧美视频完全免费看| 欧美三级在线看| 7777精品伊人久久久大香线蕉的| 欧美疯狂做受xxxx富婆| 欧美一区二区三区白人| 日韩欧美第一区| 久久综合狠狠综合久久激情| 国产视频亚洲色图| 亚洲国产精品黑人久久久| 国产夜色精品一区二区av| 欧美三级电影在线看| 久久综合久久鬼色中文字| 久久久久久久久久久黄色| 丝袜美腿亚洲一区二区图片| 亚洲成人综合在线| www.日韩大片| 久久er99热精品一区二区| 精品一区精品二区高清| 欧美日韩久久久久久| 欧美成人精品1314www| 欧美电影免费观看完整版| 精品国产一区二区三区忘忧草| 日韩一级欧美一级| 在线精品视频一区二区| 91婷婷韩国欧美一区二区| 精品一区二区三区久久| 亚洲综合免费观看高清在线观看| 欧美xfplay| 666欧美在线视频| 一区二区三区在线影院| 欧美色图第一页| 一区二区三区在线高清| 国产在线日韩欧美| 色噜噜狠狠一区二区三区果冻| 欧美午夜精品免费| 欧美高清hd18日本| 国产午夜一区二区三区| 亚洲欧洲色图综合| 麻豆精品新av中文字幕| 国产高清不卡二三区| 91老师片黄在线观看| 欧美二区在线观看| 国产精品国产三级国产aⅴ入口 | 欧美aaaaaa午夜精品| 麻豆精品在线视频| av高清久久久| 欧美三区在线观看| 国产精品久久久久婷婷二区次 | 国产精品婷婷午夜在线观看| 亚洲男人的天堂在线观看| 免费成人你懂的| 97精品电影院| 国产日韩欧美精品综合| 99国产精品99久久久久久| 99久久精品久久久久久清纯| 精品日韩欧美一区二区| 麻豆成人免费电影| 一本久道中文字幕精品亚洲嫩| 国产精品99久久久久久有的能看| 在线亚洲免费视频| 亚洲视频中文字幕| 成人激情午夜影院| 久久国产免费看| 日韩不卡在线观看日韩不卡视频| 久久九九全国免费| 精品女同一区二区| 五月婷婷欧美视频| 在线一区二区三区做爰视频网站| 日本一区二区三区电影| 蜜臀av性久久久久蜜臀aⅴ| 欧美系列日韩一区| 亚洲欧美日韩久久| 成人午夜免费电影| 精品成人一区二区| 免费精品99久久国产综合精品| 色婷婷av一区二区三区软件 | 亚洲免费在线看| 成人免费看的视频| 国产清纯白嫩初高生在线观看91| 日韩电影在线看| 51精品久久久久久久蜜臀| 午夜日韩在线电影| 欧美日韩一区国产| 亚洲第一在线综合网站| 色老头久久综合| 一区二区三区欧美日| 91精品福利视频| 亚洲一本大道在线| 欧美日韩成人在线| 日本少妇一区二区| 日韩欧美高清一区| 精品中文字幕一区二区| 精品国产亚洲在线| 韩国女主播成人在线观看| 精品国产乱码久久久久久牛牛| 另类综合日韩欧美亚洲| 精品99久久久久久| 国产xxx精品视频大全| 欧美国产一区视频在线观看| 成人av在线网| 亚洲男同性恋视频| 欧美视频在线一区二区三区 | 在线日韩国产精品| 亚洲一区二区五区| 91精品国产综合久久精品麻豆| 日韩成人精品在线| 国产亚洲一区二区三区| 成人av电影在线观看| 亚洲精品成人天堂一二三| 欧美日韩国产免费一区二区| 六月婷婷色综合| 国产精品免费看片| 欧美亚洲禁片免费| 九九视频精品免费| 亚洲免费伊人电影| 日韩欧美在线不卡| 成人国产电影网| 日韩综合在线视频| 欧美国产精品久久|