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

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

?? trianglecreator.cpp

?? 三角網的計算與繪制
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "StdAfx.h"
#include "TriangleCreator.h"
#include <float.h>
#include <math.h>

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CBorder::CBorder()
{
	m_iTriangleIndex=-1;
	m_byteBorderIndex=255;
	m_byteFlag=0;
}
void CBorder::ClearFlag()
{
	m_byteFlag=0;
}
void CBorder::SetFlag(BYTE byteFlag)
{
	m_byteFlag=byteFlag;
}
BYTE CBorder::GetFlag()
{
	return m_byteFlag;
}
BOOL CBorder::IsValid()
{
	return m_iPointIndex0!=INT_MAX && m_iPointIndex1!=INT_MAX;
}
void CBorder::Reverse()
{
	int iPointIndex=m_iPointIndex0;
	m_iPointIndex0=m_iPointIndex1;
	m_iPointIndex1=iPointIndex;
}
int CBorder::GetPointIndex(BYTE byteIndex)
{
	if(byteIndex==0)
		return m_iPointIndex0;
	else
		return m_iPointIndex1;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CTriangle::CTriangle()
{
	m_byteFlag=0;

}
void CTriangle::ClearNeighbors()
{
	m_Border[0].m_iTriangleIndex=-1;
	m_Border[1].m_iTriangleIndex=-1;
	m_Border[2].m_iTriangleIndex=-1;
}
void CTriangle::ClearNeighbor(BYTE byteBorderIndex)
{
	m_Border[byteBorderIndex].m_iTriangleIndex=-1;
}
void CTriangle::SetNeighbor(BYTE byteBorderIndex,int iNeighborTriangleIndex,BYTE byteNeighborBorderIndex1)
{
	m_Border[byteBorderIndex].m_iTriangleIndex=iNeighborTriangleIndex;
	m_Border[byteBorderIndex].m_byteBorderIndex=byteNeighborBorderIndex1;
}
BOOL CTriangle::IsSameBorder(BYTE byteBorderIndex,CTriangle& triangle,BYTE byteBorderIndex1)
{
	int i0,i1;
	GetBorderPointIndex(byteBorderIndex,i0,i1);

	int j0,j1;
	
	triangle.GetBorderPointIndex(byteBorderIndex1,j0,j1);

	ASSERT(!(i0==j0 && i1==j1));

	return i0==j1 && i1==j0;
}
void CTriangle::ClearBorderFlag()
{
	m_Border[0].ClearFlag();
	m_Border[1].ClearFlag();
	m_Border[2].ClearFlag();
}
void CTriangle::SetBorderFlag(BYTE byteBorderIndex,BYTE byteFlag)
{
	m_Border[byteBorderIndex].SetFlag(byteFlag);
}
BYTE CTriangle::GetBorderFlag(BYTE byteBorderIndex)
{
	return m_Border[byteBorderIndex].GetFlag();
}
CBorder* CTriangle::GetBorder(BYTE byteBorderIndex)
{
	return m_Border+byteBorderIndex;
}
void CTriangle::GetPointIndex(int* piPointIndex)
{
	piPointIndex[0]=m_Border[0].m_iPointIndex0;
	piPointIndex[1]=m_Border[1].m_iPointIndex0;
	piPointIndex[2]=m_Border[2].m_iPointIndex0;
}
int CTriangle::GetPointIndex(BYTE byteNodeIndex)
{
	return m_Border[byteNodeIndex].m_iPointIndex0;
}
void CTriangle::SetPointIndex(BYTE byteNodeIndex,int iPointIndex)
{
	m_Border[byteNodeIndex].m_iPointIndex0=iPointIndex;
	m_Border[(byteNodeIndex+2)%3].m_iPointIndex1=iPointIndex;
}
void CTriangle::GetBorderPointIndex(BYTE byteBorderIndex,int& iPointIndex0,int& iPointIndex1)
{
	iPointIndex0=m_Border[byteBorderIndex].m_iPointIndex0;
	iPointIndex1=m_Border[byteBorderIndex].m_iPointIndex1;
}
void CTriangle::GetNeighbor(BYTE byteBorderIndex,int& iNeighborTriangleIndex,BYTE& byteNeighborBorderIndex)
{
	iNeighborTriangleIndex=m_Border[byteBorderIndex].m_iTriangleIndex;
	byteNeighborBorderIndex=m_Border[byteBorderIndex].m_byteBorderIndex;
}
void CTriangle::SetFlag()
{
	m_byteFlag=1;
}
BOOL CTriangle::GetFlag()
{
	return m_byteFlag>0;
}
void CTriangle::ClearFlag()
{
	m_byteFlag=0;
}
void CTriangle::operator=(CTriangle& triangle)
{
	memcpy(this,&triangle,sizeof(CTriangle));
}

CTriangleCreator::CTriangleCreator()
{

}
CTriangleCreator::~CTriangleCreator()
{

}
void CTriangleCreator::AddPoint(double x,double y)
{
	WPOINT p;
	p.x=x;
	p.y=y;
	m_PointArray.Add(p);
}
int CTriangleCreator::GetPointCount()
{
	return (int)m_PointArray.GetCount();
}
WPOINT* CTriangleCreator::GetPointArray()
{
	return m_PointArray.GetData();
}
void CTriangleCreator::CreateTriangle(double dLimitAngle)
{
	m_TriangleArray.RemoveAll();

	WPOINT* pPointArray=m_PointArray.GetData();
	int iPointCount=(int)m_PointArray.GetSize();

	if(iPointCount<3)
		return;

	double dLimit=cos(dLimitAngle*3.1415926/180.0);

	for(int i=0;i<iPointCount;i++)
		pPointArray[i].flag=0;

	CBorder border;
	CTriangle triangle;

	int index0=-1;
	int index1=-1;

	double d=FLT_MAX;
	for(int i=0;i<iPointCount;i++)
	{
		int k; for(k=i+1;k<iPointCount;k++)
		{
			double dx=pPointArray[k].x-pPointArray[0].x;
			double dy=pPointArray[k].y-pPointArray[0].y;

			double dd=sqrt(dx*dx+dy*dy);
			if(dd<d)
			{
				d=dd;
				index0=i;
				index1=k;
			}
		}
	}

	//先構造一個初始的三角形
	triangle.SetPointIndex(0,index0);
	triangle.SetPointIndex(1,index1);
	triangle.SetPointIndex(2,index0);

	m_TriangleArray.SetSize(iPointCount);
	m_TriangleArray.RemoveAll();

	m_TriangleArray.Add(triangle);

	CArray<CBorder,CBorder> BorderIndexArray;

	border.m_iTriangleIndex=(int)m_TriangleArray.GetSize()-1;
	border.m_byteBorderIndex=0;
	border.m_iPointIndex0=index0;
	border.m_iPointIndex1=index1;
	BorderIndexArray.Add(border);

	border.m_iTriangleIndex=(int)m_TriangleArray.GetSize()-1;
	border.m_byteBorderIndex=1;
	border.m_iPointIndex0=index1;
	border.m_iPointIndex1=index0;
	BorderIndexArray.Add(border);

	WPOINT fp0,fp1;

	int iStartSearchIndex=0;

	//擴充輪廓 
	while(TRUE) 
	{
		int iBorderCount=(int)BorderIndexArray.GetSize();
		int iTriangleCount=(int)m_TriangleArray.GetSize();
		CBorder* pBorderArray=BorderIndexArray.GetData();
		CTriangle* pTriangleArray=m_TriangleArray.GetData();

		double dAngle=FLT_MAX;
		int iBorderIndex=-1;
		int iPointIndex=-1;//新找到的點序號
		int iPointIndex0,iPointIndex1;//原來的點序號

		if(iStartSearchIndex>=iBorderCount) iStartSearchIndex=0;
		int i; for(i=0;i<iBorderCount;i++)
		{
			int ii=i+iStartSearchIndex;
			if(ii>=iBorderCount) ii-=iBorderCount;

			if(pBorderArray[ii].GetFlag()) continue;

			border=pBorderArray[ii];

			pTriangleArray[border.m_iTriangleIndex].GetBorderPointIndex(border.m_byteBorderIndex,iPointIndex0,iPointIndex1);

			ASSERT(iPointIndex0>=0);
			ASSERT(iPointIndex1>=0);

			fp0=pPointArray[iPointIndex0];
			fp1=pPointArray[iPointIndex1];

			double dy=fp1.y-fp0.y;
			double dx=fp1.x-fp0.x;
			double xy=fp0.y*fp1.x-fp0.x*fp1.y;
			double cc=dx*dx+dy*dy;
			double c=sqrt(cc);

			dAngle=FLT_MAX;
			iPointIndex=-1;

			int j; 
			for(j=0;j<iPointCount;j++)
			{
				if(j==iPointIndex0 || j==iPointIndex1) continue;

				if(pPointArray[j].x==FLT_MAX) continue;
				if(pPointArray[j].flag!=0) continue;

				double d=dy*pPointArray[j].x-dx*pPointArray[j].y+xy;
				if(d>=-0.1) continue;//只考慮fp0,fp1左側的點

				double dxa=pPointArray[j].x-fp1.x;
				double dya=pPointArray[j].y-fp1.y;
				double aa=dxa*dxa+dya*dya;
				double a=sqrt(aa);

				double dxb=pPointArray[j].x-fp0.x;
				double dyb=pPointArray[j].y-fp0.y;
				double bb=dxb*dxb+dyb*dyb;
				double b=sqrt(bb);

				//				ASSERT(aa>0.0 && bb>0.0);

				double cosc;

				if(a==0.0 || b==0.0)
				{
					cosc=-1.0;
				}
				else
					cosc=(aa+bb-cc)/a/b/2.0;

				if(cosc<dAngle)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人欧美日韩在线电影| 激情综合色丁香一区二区| ww久久中文字幕| 欧美一区二区福利视频| 欧美人动与zoxxxx乱| 337p亚洲精品色噜噜狠狠| 欧美精品乱码久久久久久| 欧美群妇大交群中文字幕| 欧美日韩一区二区三区四区五区| 欧美视频一区在线观看| 91精品国产综合久久福利 | 亚洲精品视频一区二区| 亚洲男女一区二区三区| 亚洲国产日韩a在线播放| 日韩不卡在线观看日韩不卡视频| 久久精品免费看| 成人激情视频网站| 欧美主播一区二区三区美女| 这里是久久伊人| 久久久青草青青国产亚洲免观| 国产亚洲成年网址在线观看| 国产精品麻豆视频| 亚洲一区二区偷拍精品| 日本在线不卡视频| 国产福利视频一区二区三区| 色综合 综合色| 日韩欧美国产一区二区三区| 中文在线一区二区| 亚洲成av人片| 国产.欧美.日韩| 欧美人伦禁忌dvd放荡欲情| 久久久国际精品| 亚洲一区二区三区四区的| 极品美女销魂一区二区三区 | 久久久精品日韩欧美| 亚洲裸体在线观看| 极品少妇xxxx精品少妇| 在线一区二区三区做爰视频网站| 91精品国产综合久久久久久久久久| 精品国产凹凸成av人网站| 亚洲欧美偷拍另类a∨色屁股| 精品亚洲免费视频| 91豆麻精品91久久久久久| 久久你懂得1024| 日本91福利区| 在线观看不卡视频| 日本一区二区免费在线观看视频 | 亚洲成人一区在线| 成人免费毛片高清视频| 欧美一区二区三区四区在线观看| 中文字幕日本不卡| 国产综合一区二区| 欧美一级xxx| 一区二区三区国产豹纹内裤在线| 国产成人一区二区精品非洲| 日韩一区国产二区欧美三区| 亚洲欧美综合色| 国产精品一区二区久激情瑜伽| 欧美乱熟臀69xxxxxx| 亚洲女人的天堂| youjizz国产精品| 国产欧美一区二区三区沐欲| 久久www免费人成看片高清| 欧美日韩在线免费视频| 亚洲一区二区三区四区在线免费观看 | 亚洲欧美一区二区视频| 麻豆精品精品国产自在97香蕉| av中文字幕一区| 国产欧美日韩卡一| 韩国理伦片一区二区三区在线播放| 欧美三级电影在线看| 亚洲一区在线观看免费 | 国产精品久久网站| 国产99久久久国产精品潘金 | 成人h动漫精品一区二区 | 99精品欧美一区二区三区综合在线| 精品国产乱码久久久久久牛牛| 免费观看日韩电影| 久久久久亚洲综合| 懂色av噜噜一区二区三区av| 国产精品天天看| 91麻豆国产福利精品| 中文字幕一区二区5566日韩| 成人免费av在线| 亚洲视频在线观看三级| 欧美亚洲动漫另类| 亚洲va欧美va人人爽| 91精品综合久久久久久| 久久成人免费网| 久久精品一区蜜桃臀影院| 成人在线综合网站| 亚洲一区二区三区四区五区中文| 欧美日韩国产精选| 国产美女精品在线| 国产精品盗摄一区二区三区| 欧美撒尿777hd撒尿| 日韩av一级电影| 久久久久久久综合日本| 99久久免费视频.com| 亚洲网友自拍偷拍| 国产欧美一区二区精品秋霞影院| 99久久99久久精品免费观看| 亚洲r级在线视频| 久久久综合精品| 欧美少妇xxx| 国产在线不卡视频| 亚洲精品美国一| 欧美一区二区三区啪啪| 国产成人av电影在线播放| 亚洲欧美一区二区三区极速播放| 337p亚洲精品色噜噜噜| 懂色av中文字幕一区二区三区| 亚洲午夜免费电影| 国产日韩精品视频一区| 欧美三级电影一区| 成人一级黄色片| 视频一区视频二区在线观看| 国产精品久久久99| 欧美成人官网二区| 在线免费观看日本欧美| 国产伦精一区二区三区| 性做久久久久久久久| 国产欧美一区二区三区网站| 在线成人av网站| 91丨九色porny丨蝌蚪| 国产一区亚洲一区| 日韩在线一区二区三区| 亚洲视频在线观看三级| 国产亚洲午夜高清国产拍精品| 欧美精品丝袜久久久中文字幕| 成人av免费在线| 精东粉嫩av免费一区二区三区| 一区二区三区国产精华| 亚洲丝袜精品丝袜在线| 国产亚洲成年网址在线观看| 欧美不卡在线视频| 日韩一区二区三区在线视频| 欧美中文字幕一二三区视频| 99久久久无码国产精品| 国产成人免费av在线| 紧缚奴在线一区二区三区| 午夜av电影一区| 亚洲va韩国va欧美va| 亚洲精品视频免费观看| 国产精品传媒入口麻豆| 欧美—级在线免费片| 国产三级欧美三级日产三级99 | 毛片基地黄久久久久久天堂| 亚洲一区二区视频在线| 亚洲国产视频直播| 亚洲一区二区三区视频在线播放| 亚洲视频一二三| 亚洲精品国产精品乱码不99| 日韩毛片在线免费观看| 亚洲精品成人天堂一二三| 亚洲卡通动漫在线| 一区二区三区色| 亚洲专区一二三| 日本中文一区二区三区| 免费欧美高清视频| 国产美女av一区二区三区| 国产乱码一区二区三区| 国产精品白丝jk黑袜喷水| 国产69精品久久99不卡| 91捆绑美女网站| 精品1区2区3区| 精品日韩一区二区| 国产精品入口麻豆九色| 亚洲色大成网站www久久九九| 亚洲精选一二三| 奇米影视一区二区三区| 激情综合五月天| av电影在线观看不卡| 欧美在线免费观看亚洲| 这里只有精品视频在线观看| 久久你懂得1024| 亚洲男人天堂av| 美日韩一区二区| 本田岬高潮一区二区三区| 欧日韩精品视频| 久久久久久久av麻豆果冻| 中文字幕中文字幕一区二区| 亚洲成av人片在www色猫咪| 久久99久久久久久久久久久| 国产99久久久国产精品潘金网站| 色哦色哦哦色天天综合| 欧美va在线播放| 中文字幕日韩一区二区| 免费久久精品视频| 色欧美日韩亚洲| 久久午夜电影网| 亚洲在线成人精品| 国产一区二区三区久久久| 在线亚洲高清视频| 久久久一区二区三区| 亚洲高清三级视频| 成人av网站在线观看| 日韩一区二区免费高清| 亚洲欧洲另类国产综合| 国内精品第一页|