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

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

?? beziercurve.cpp

?? Windows 圖形編程 書籍
?? CPP
字號:
//-----------------------------------------------------------------------------------//
//              Windows Graphics Programming: Win32 GDI and DirectDraw               //
//                             ISBN  0-13-086985-6                                   //
//                                                                                   //
//  Written            by  Yuan, Feng                             www.fengyuan.com   //
//  Copyright (c) 2000 by  Hewlett-Packard Company                www.hp.com         //
//  Published          by  Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com      //
//                                                                                   //
//  FileName   : beziercurve.cpp					                                 //
//  Description: Generic arc/bezier curves drawing                                   //
//  Version    : 1.00.000, May 31, 2000                                              //
//-----------------------------------------------------------------------------------//

#define STRICT
#define _WIN32_WINNT 0x0500
#define WIN32_LEAN_AND_MEAN

#include <windows.h>
#include <assert.h>
#include <tchar.h>
#include <math.h>

#include "BezierCurve.h"

// Simple text label
void Label(HDC hDC, int x, int y, const char * mess)
{
	TextOut(hDC, x, y, mess, _tcslen(mess));
}


// Label Bezier Curve control points
void Label(HDC hDC, POINT p[], int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
{
	Label(hDC, p[0].x+x1, p[0].y+y1, "P1");
	Label(hDC, p[1].x+x2, p[1].y+y2, "P2");
	Label(hDC, p[2].x+x3, p[2].y+y3, "P3");
	Label(hDC, p[3].x+x4, p[3].y+y4, "P4");
}


// Point inteporation
void P(POINT & rslt, POINT & p1, POINT p2, double t)
{
	rslt.x = (int) ( (1-t) * p1.x + t * p2.x );
	rslt.y = (int) ( (1-t) * p1.y + t * p2.y );
}


// Line
void Line(HDC hDC, int x0, int y0, int x1, int y1)
{
	MoveToEx(hDC, x0, y0, NULL); LineTo(hDC, x1, y1);
}


// Line
void Line(HDC hDC, int x0, int y0, int x1, int y1, HPEN hPen)
{
	SelectObject(hDC, hPen);

	MoveToEx(hDC, x0, y0, NULL); LineTo(hDC, x1, y1);

	SelectObject(hDC, GetStockObject(BLACK_PEN));
}


// Line
void Line(HDC hDC, POINT & p1, POINT & p2)
{
	MoveToEx(hDC, p1.x, p1.y, NULL);
	LineTo(hDC, p2.x, p2.y);
}


// 3x3 dot
void Dot(HDC hDC, int x, int y)
{
	for (int i=-1; i<=1; i++)
	for (int j=-1; j<=1; j++)
		SetPixel(hDC, x+i, y+j, RGB(0, 0, 0xFF));
}


// simulate AngleArcTo using ArcTo
BOOL AngleArcTo(HDC hDC, int X, int Y, DWORD dwRadius, FLOAT eStartAngle, FLOAT eSweepAngle)
{
	const FLOAT pi = (FLOAT) 3.141592653586;

	if ( eSweepAngle >=360 )	// more than one circle is one circle
		eSweepAngle = 360;
	else if ( eSweepAngle <= -360 )
		eSweepAngle = - 360;

	FLOAT  eEndAngle   = (eStartAngle + eSweepAngle ) * pi / 180;
	       eStartAngle = eStartAngle * pi / 180;
	
	int dir;
	
	if ( eSweepAngle > 0 )
		dir = SetArcDirection(hDC, AD_COUNTERCLOCKWISE);
	else
		dir = SetArcDirection(hDC, AD_CLOCKWISE);
	
	BOOL rslt = ArcTo(hDC, X - dwRadius, Y - dwRadius, X + dwRadius, Y + dwRadius,
		              X + (int) (dwRadius * 10 * cos(eStartAngle)), 
					  Y - (int) (dwRadius * 10 * sin(eStartAngle)),
			          X + (int) (dwRadius * 10 * cos(eEndAngle)),   
					  Y - (int) (dwRadius * 10 * sin(eEndAngle)));

	SetArcDirection(hDC, dir);
	return rslt;
}


// Break Bezier curve into lines

void Bezier(HDC hDC, double x1, double y1, double x2, double y2, 
			         double x3, double y3, double x4, double y4)
{
	double A = y4 - y1;
	double B = x1 - x4;
	double C = y1 * (x4-x1) - x1 * ( y4-y1);
	// Ax + By + C = 0  is line (x1,y1) - (x4,y4)

	double AB  = A * A + B * B;

	// distance from (x2,y2) to the line is less than 1
	// distance from (x3,y3) to the line is less than 1
	if ( ( A * x2 + B * y2 + C ) * ( A * x2 + B * y2 + C ) < AB )
	if ( ( A * x3 + B * y3 + C ) * ( A * x3 + B * y3 + C ) < AB )
	{
		MoveToEx(hDC, (int)x1, (int)y1, NULL);
		LineTo(hDC, (int)x4, (int)y4);

		return;
	}
	
	double x12   = x1+x2;
	double y12   = y1+y2;
	double x23   = x2+x3;
	double y23   = y2+y3;
	double x34   = x3+x4;
	double y34   = y3+y4;

	double x1223 = x12+x23;
	double y1223 = y12+y23;
	double x2334 = x23+x34;
	double y2334 = y23+y34;

	double x     = x1223 + x2334;
	double y     = y1223 + y2334;

	Bezier(hDC, x1, y1, x12/2, y12/2, x1223/4, y1223/4, x/8, y/8);
	Bezier(hDC, x/8, y/8, x2334/4, y2334/4, x34/2, y34/2, x4, y4);
}


// Calculate coordinate according to Bezier curve formula
double P(double t, double p1, double p2, double p3, double p4)
{
	return     (1-t)*(1-t)*(1-t) * p1 +
		   3 * (1-t)*(1-t)*t     * p2 +
		   3 * (1-t)*t*t         * p3 +
		       t*t*t             * p4;
}


// calculate the largest error from a 90 degree Bezier curve relative to the unit circle
double Error(double m, double & et)
{
//	double R = 4 * ( sqrt(2.0) - 1 ) / 3;

	double t     = 0;
	double error = 0;

	while ( t<=0.5 )
	{
		double x = P(t, 0, m, 1, 1);
	    double y = P(t, 1, 1, m, 0);

		x = sqrt(x * x + y * y) - 1;

		if ( fabs(x)>fabs(error) )
		{
			et    = t;
			error = x;
		}

		t += 0.001;
	}

	return error;
}

/*
Approximating sqrt(2)-1

n		m		n/m
1		2		0.5
2		5		0.4
5		12		0.416666667
12		29		0.413793103
29		70		0.414285714
70		169		0.414201183
169		408		0.414215686
408		985		0.414213198
985		2378	0.414213625
2378	5741	0.414213552
5741	13860	0.414213564

n:m -> m : 2m+n
*/

// Drawing a full ellipse using 4 Bezier curves
BOOL EllipseToBezier(HDC hDC, int left, int top, int right, int bottom)
{
	const double M = 0.55228474983;
	
	POINT P[13];

	int dx = (int) ((right - left) * (1-M) / 2);
	int dy = (int) ((bottom - top) * (1-M) / 2);

	P[ 0].x = right;			//	 .   .   .   .   .   
	P[ 0].y = (top+bottom)/2;   //       4   3   2
	P[ 1].x = right;			//
	P[ 1].y = top + dy;         //   5               1
	P[ 2].x = right - dx;       //
	P[ 2].y = top;				//   6              0,12
	P[ 3].x = (left+right)/2;	//
	P[ 3].y = top;				//   7               11	
								//
	P[ 4].x = left + dx;		//       8   9   10	
	P[ 4].y = top;				
	P[ 5].x = left;
	P[ 5].y = top + dy;
	P[ 6].x = left;
	P[ 6].y = (top+bottom)/2;

	P[ 7].x = left;
	P[ 7].y = bottom - dy;
	P[ 8].x = left + dx;
	P[ 8].y = bottom;
	P[ 9].x = (left+right)/2;
	P[ 9].y = bottom;

	P[10].x = right - dx;
	P[10].y = bottom;
	P[11].x = right;
	P[11].y = bottom - dy;
	P[12].x = right;
	P[12].y = (top+bottom)/2;

	return PolyBezier(hDC, P, 13);
}


// Drawing an arc using a singple Bezier curve

BOOL AngleArcToBezier(HDC hDC, int x0, int y0, int rx, int ry, 
					  double startangle, double sweepangle, double * err)
{
	double XY[8];
	POINT P[4];

	// Compute bezier curve for arc centered along y axis
	// Anticlockwise: (0,-B), (x,-y), (x,y), (0,B) 
	double B = ry * sin(sweepangle/2);
	double C = rx * cos(sweepangle/2);
	double A = rx  - C;

	double X = A*4/3;
	double Y = B - X * (rx-A)/B;

	XY[0] =   C;
	XY[1] = - B;
	XY[2] =   C+X;
	XY[3] = - Y;
	XY[4] =   C+X;
	XY[5] =   Y;
	XY[6] =   C;
	XY[7] =   B;

	// rotate to the original angle
	double s = sin(startangle + sweepangle/2);
	double c = cos(startangle + sweepangle/2);

	double xy[8];
	
	for (int i=0; i<4; i++)
	{
		if ( err )
		{
			xy[i*2]   = XY[i*2] * c - XY[i*2+1] * s;
			xy[i*2+1] = XY[i*2] * s + XY[i*2+1] * c;
		}

		P[i].x = x0 + (int) (XY[i*2] * c - XY[i*2+1] * s);
		P[i].y = y0 + (int) (XY[i*2] * s + XY[i*2+1] * c);
	}

	if ( err )
	{		
		double t   = 0;

		* err = 0;

		while ( t<=1 )
		{
			double x = ::P(t, xy[0], xy[2], xy[4], xy[6]) / rx;
			double y = ::P(t, xy[1], xy[3], xy[5], xy[7]) / ry;
			double r = sqrt(x*x + y*y);

			if ( fabs(r-1) > fabs(*err) )
				*err = r-1;

			t += 0.01;
		}
	}

	return PolyBezier(hDC, P, 4);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合999| 97久久超碰国产精品| 日韩和欧美一区二区| 亚洲一区二区视频| 亚洲一区二区三区视频在线播放| 成人少妇影院yyyy| 国模无码大尺度一区二区三区| 视频一区欧美日韩| 日本成人在线一区| 精品一区二区三区不卡| 精品亚洲免费视频| 国产在线播放一区二区三区| 国产做a爰片久久毛片| 国内精品国产成人| 国产精品一区免费在线观看| 国产99精品国产| av一区二区三区| 99re热视频这里只精品| 在线免费不卡视频| 51午夜精品国产| 精品久久人人做人人爰| 久久综合色鬼综合色| 欧美高清在线精品一区| 亚洲视频小说图片| 偷窥国产亚洲免费视频| 久久www免费人成看片高清| 国产一区二区看久久| 9l国产精品久久久久麻豆| 色中色一区二区| 欧美电影在哪看比较好| 精品久久久久久久人人人人传媒 | 一区二区三区 在线观看视频| 亚洲男人的天堂在线aⅴ视频| 亚洲国产日日夜夜| 久久精品国产精品青草| 成人avav影音| 欧美日韩国产首页在线观看| 精品国产免费视频| 亚洲欧美日韩综合aⅴ视频| 亚洲妇女屁股眼交7| 国产一区二区三区在线看麻豆| heyzo一本久久综合| 91麻豆精品国产91久久久久久久久 | 麻豆免费精品视频| 国产超碰在线一区| 欧美三级韩国三级日本三斤| 精品国产伦一区二区三区观看体验| 国产精品高清亚洲| 首页国产欧美久久| 波多野结衣视频一区| 欧美一级一区二区| 最新国产の精品合集bt伙计| 免费观看一级欧美片| 91农村精品一区二区在线| 日韩欧美国产麻豆| 亚洲精品国产第一综合99久久| 蜜桃在线一区二区三区| 一本久久精品一区二区| 日韩午夜精品视频| 亚洲另类春色校园小说| 国产一区二区在线看| 欧美日韩亚洲综合一区| 国产精品高潮呻吟| 国产一区二区三区在线观看免费 | 91精品麻豆日日躁夜夜躁| 国产精品高潮呻吟| 国产在线不卡一卡二卡三卡四卡| 欧美在线观看视频一区二区三区| 久久精品人人爽人人爽| 免费观看久久久4p| 麻豆成人91精品二区三区| 色婷婷av一区| 国产精品久久福利| 韩国精品久久久| 91精品福利在线一区二区三区 | 一级特黄大欧美久久久| 国产在线不卡视频| 日韩欧美高清在线| 午夜影视日本亚洲欧洲精品| 99国产精品久| 中国色在线观看另类| 韩国三级在线一区| 91精品国产入口| 天堂资源在线中文精品| 成人97人人超碰人人99| 久久先锋影音av| 久久99国产精品久久99果冻传媒| 在线观看av不卡| 亚洲欧美日韩人成在线播放| 国产99久久久国产精品免费看| 久久人人97超碰com| 久久99精品国产.久久久久久| 欧美一区二区精品| 日韩成人精品在线观看| 欧美色视频一区| 亚洲一区在线观看免费观看电影高清| eeuss鲁片一区二区三区在线观看| 国产日韩欧美亚洲| 国产精品夜夜嗨| 国产欧美日韩精品a在线观看| 加勒比av一区二区| 欧美精品一区二区三区蜜桃视频| 日本三级韩国三级欧美三级| 欧美日韩高清在线播放| 日本少妇一区二区| 日韩精品中文字幕在线不卡尤物| 日韩精品色哟哟| 欧美一级片在线| 久久精品国产一区二区三区免费看| 日韩精品在线看片z| 国产一区二三区| 国产视频在线观看一区二区三区| 国产成人av在线影院| 中文字幕的久久| 91无套直看片红桃| 亚洲一区二区四区蜜桃| 欧美精品在线观看播放| 麻豆精品视频在线观看免费| 精品国产91九色蝌蚪| 成人综合在线观看| 18成人在线观看| 欧美性色aⅴ视频一区日韩精品| 日日骚欧美日韩| 精品福利视频一区二区三区| 丁香网亚洲国际| 一级中文字幕一区二区| 日韩欧美一二三| 国产大陆亚洲精品国产| 亚洲精品亚洲人成人网在线播放| 欧美日韩国产免费一区二区| 狠狠狠色丁香婷婷综合激情| 亚洲欧洲性图库| 欧美精品色一区二区三区| 亚洲第一精品在线| 91亚洲大成网污www| 天堂一区二区在线免费观看| 久久精品一区四区| av一区二区三区黑人| 日韩精品一卡二卡三卡四卡无卡| 久久综合丝袜日本网| 色综合网色综合| 免费在线视频一区| 中文字幕一区二区5566日韩| 欧美猛男超大videosgay| 国产一区视频网站| 一区二区三区久久| 2021久久国产精品不只是精品| 99精品桃花视频在线观看| 日本人妖一区二区| 亚洲视频一区在线| 亚洲精品一区二区三区99| 一本大道av伊人久久综合| 久久99国内精品| 亚洲国产综合在线| 亚洲国产精品成人综合| 欧美日韩一区二区电影| 成人综合在线观看| 男人的天堂亚洲一区| 亚洲精品水蜜桃| 国产亚洲精品超碰| 欧美日韩国产高清一区二区| 成人av高清在线| 蜜桃视频一区二区| 一区二区三区中文在线观看| 久久色成人在线| 欧美女孩性生活视频| 99精品久久只有精品| 国产一区三区三区| 日韩avvvv在线播放| 亚洲乱码国产乱码精品精小说| 欧美白人最猛性xxxxx69交| 欧美丝袜丝交足nylons图片| 成人av午夜影院| 国产尤物一区二区在线| 日韩精品久久理论片| 一区二区三区欧美日韩| 国产亲近乱来精品视频| 精品第一国产综合精品aⅴ| 欧美丝袜自拍制服另类| 91蜜桃网址入口| 成人综合激情网| 国内久久精品视频| 日韩主播视频在线| 亚洲第一电影网| 亚洲免费观看高清| 国产精品久久久久久久久快鸭| 精品国产乱码久久久久久夜甘婷婷| 欧美日韩国产综合久久| 欧美图区在线视频| 欧洲亚洲精品在线| 一本到三区不卡视频| 成人在线视频一区二区| 高清久久久久久| 国产精品1区2区3区| 国内精品写真在线观看| 久久精品国产77777蜜臀| 毛片av中文字幕一区二区| 日韩av中文字幕一区二区三区 | 成人看片黄a免费看在线| 国产麻豆精品一区二区|