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

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

?? miarc.c

?? linux下電話本所依賴的一些圖形庫
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* $XFree86: xc/programs/Xserver/mi/miarc.c,v 3.7 1999/12/27 00:39:56 robin Exp $ *//***********************************************************Copyright 1987, 1998  The Open GroupAll Rights Reserved.The above copyright notice and this permission notice shall be included inall copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THEOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER INAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR INCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.Except as contained in this notice, the name of The Open Group shall not beused in advertising or otherwise to promote the sale, use or other dealingsin this Software without prior written authorization from The Open Group.Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.                        All Rights ReservedPermission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and thatboth that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not beused in advertising or publicity pertaining to distribution of thesoftware without specific, written prior permission.  DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDINGALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALLDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES ORANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THISSOFTWARE.******************************************************************//* $TOG: miarc.c /main/91 1998/02/09 14:45:57 kaleb $ *//* Author: Keith Packard and Bob Scheifler *//* Warning: this code is toxic, do not dally very long here. */#define _XOPEN_SOURCE_EXTENDED	/* to get prototype for cbrt on some systems */#define _XOPEN_SOURCE     	/* to get prototype for hypot on some systems */#include <config.h>#include <string.h>		/* memmove */#include <limits.h>#include <math.h>#include "mi.h"#include "gdkprivate-fb.h"static double miDsin(double a), miDcos(double a), miDasin(double a), miDatan2(double x, double y);#ifdef ICEILTEMPDECLICEILTEMPDECL#endif/* * some interesting sematic interpretation of the protocol: * * Self intersecting arcs (i.e. those spanning 360 degrees)  *  never join with other arcs, and are drawn without caps *  (unless on/off dashed, in which case each dash segment *  is capped, except when the last segment meets the *  first segment, when no caps are drawn) * * double dash arcs are drawn in two parts, first the *  odd dashes (drawn in background) then the even dashes *  (drawn in foreground).  This means that overlapping *  sections of foreground/background are drawn twice, *  first in background then in foreground.  The double-draw *  occurs even when the function uses the destination values *  (e.g. xor mode).  This is the same way the wide-line *  code works and should be "fixed". * */#undef max#undef min#if defined (__GNUC__) && defined (__STDC__) && !defined (__STRICT_ANSI__)#define USE_INLINE#endifstruct bound {	double	min, max;};struct ibound {	int	min, max;};#define boundedLe(value, bounds)\	((bounds).min <= (value) && (value) <= (bounds).max)struct line {	double	m, b;	int	valid;};#define intersectLine(y,line) (line.m * (y) + line.b)/* * these are all y value bounds */struct arc_bound {	struct bound	ellipse;	struct bound	inner;	struct bound	outer;	struct bound	right;	struct bound	left;	struct ibound	inneri;	struct ibound	outeri;};struct accelerators {	double		tail_y;	double		h2;	double		w2;	double		h4;	double		w4;	double		h2mw2;	double		h2l;	double		w2l;	double		fromIntX;	double		fromIntY;	struct line	left, right;	int		yorgu;	int		yorgl;	int		xorg;};struct arc_def {	double	w, h, l;	double	a0, a1;};# define todeg(xAngle)	(((double) (xAngle)) / 64.0)# define RIGHT_END	0# define LEFT_END	1typedef struct _miArcJoin {	int	arcIndex0, arcIndex1;	int	phase0, phase1;	int	end0, end1;} miArcJoinRec, *miArcJoinPtr;typedef struct _miArcCap {	int		arcIndex;	int		end;		} miArcCapRec, *miArcCapPtr;typedef struct _miArcFace {	SppPointRec	clock;	SppPointRec	center;	SppPointRec	counterClock;} miArcFaceRec, *miArcFacePtr;typedef struct _miArcData {	miArc		arc;	int		render;		/* non-zero means render after drawing */	int		join;		/* related join */	int		cap;		/* related cap */	int		selfJoin;	/* final dash meets first dash */	miArcFaceRec	bounds[2];	double		x0, y0, x1, y1;} miArcDataRec, *miArcDataPtr;/* * This is an entire sequence of arcs, computed and categorized according * to operation.  miDashArcs generates either one or two of these. */typedef struct _miPolyArc {	int		narcs;	miArcDataPtr	arcs;	int		ncaps;	miArcCapPtr	caps;	int		njoins;	miArcJoinPtr	joins;} miPolyArcRec, *miPolyArcPtr;typedef struct {    short lx, lw, rx, rw;} miArcSpan;typedef struct {    miArcSpan *spans;    int count1, count2, k;    char top, bot, hole;} miArcSpanData;typedef struct {    unsigned long lrustamp;    unsigned short lw;    unsigned short width, height;    miArcSpanData *spdata;} arcCacheRec;# define DASH_MAP_SIZE	91typedef struct {	double	map[DASH_MAP_SIZE];} dashMap;static void fillSpans(GdkDrawable *pDrawable, GdkGC *pGC);static void newFinalSpan(int y, int xmin, int xmax);static void drawArc (miArc *tarc, int l, int a0, int a1, miArcFacePtr right, miArcFacePtr left);static void drawQuadrant(struct arc_def *def, struct accelerators *acc,			 int a0, int a1, int mask, miArcFacePtr right, miArcFacePtr left,			 miArcSpanData *spdata);static void drawZeroArc(GdkDrawable *pDraw, GdkGC *pGC, miArc *tarc, int lw, miArcFacePtr right, miArcFacePtr left);static void miArcJoin(GdkDrawable *pDraw, GdkGC *pGC, miArcFacePtr pRight, miArcFacePtr pLeft, int xOrgRight, int yOrgRight,		      double xFtransRight, double yFtransRight,		      int xOrgLeft, int yOrgLeft,		      double xFtransLeft, double yFtransLeft);static void miArcCap(GdkDrawable *pDraw, GdkGC *pGC, miArcFacePtr pFace, int end, int xOrg, int yOrg,		     double xFtrans, double yFtrans);static void miRoundCap(GdkDrawable *pDraw, GdkGC *pGC, SppPointRec pCenter, SppPointRec pEnd, SppPointRec pCorner,		       SppPointRec pOtherCorner, int fLineEnd, int xOrg, int yOrg,		       double xFtrans, double yFtrans);static void miFreeArcs(miPolyArcPtr arcs, GdkGC *pGC);static int computeAngleFromPath(int startAngle, int endAngle, dashMap *map, int *lenp, int backwards);static miPolyArcPtr miComputeArcs (miArc *parcs, int narcs, GdkGC *gc);static int miGetArcPts(SppArcPtr parc, int cpt, SppPointPtr *ppPts);# define CUBED_ROOT_2	1.2599210498948732038115849718451499938964# define CUBED_ROOT_4	1.5874010519681993173435330390930175781250/* * draw one segment of the arc using the arc spans generation routines */static voidmiArcSegment(GdkDrawable *pDraw, GdkGC *pGC, miArc tarc, miArcFacePtr right, miArcFacePtr left){    int l = GDK_GC_FBDATA(pGC)->values.line_width;    int a0, a1, startAngle, endAngle;    miArcFacePtr	temp;    if (!l)	l = 1;    if (tarc.width == 0 || tarc.height == 0) {    	drawZeroArc (pDraw, pGC, &tarc, l, left, right);	return;    }    a0 = tarc.angle1;    a1 = tarc.angle2;    if (a1 > FULLCIRCLE)	a1 = FULLCIRCLE;    else if (a1 < -FULLCIRCLE)	a1 = -FULLCIRCLE;    if (a1 < 0) {    	startAngle = a0 + a1;	endAngle = a0;	temp = right;	right = left;	left = temp;    } else {	startAngle = a0;	endAngle = a0 + a1;    }    /*     * bounds check the two angles     */    if (startAngle < 0)	startAngle = FULLCIRCLE - (-startAngle) % FULLCIRCLE;    if (startAngle >= FULLCIRCLE)	startAngle = startAngle % FULLCIRCLE;    if (endAngle < 0)	endAngle = FULLCIRCLE - (-endAngle) % FULLCIRCLE;    if (endAngle > FULLCIRCLE)	endAngle = (endAngle-1) % FULLCIRCLE + 1;    if ((startAngle == endAngle) && a1) {	startAngle = 0;	endAngle = FULLCIRCLE;    }    drawArc (&tarc, l, startAngle, endAngle, right, left);}/*Three equations combine to describe the boundaries of the arcx^2/w^2 + y^2/h^2 = 1			ellipse itself(X-x)^2 + (Y-y)^2 = r^2			circle at (x, y) on the ellipse(Y-y) = (X-x)*w^2*y/(h^2*x)		normal at (x, y) on the ellipseThese lead to a quartic relating Y and yy^4 - (2Y)y^3 + (Y^2 + (h^4 - w^2*r^2)/(w^2 - h^2))y^2    - (2Y*h^4/(w^2 - h^2))y + (Y^2*h^4)/(w^2 - h^2) = 0The reducible cubic obtained from this quartic isz^3 - (3N)z^2 - 2V = 0whereN = (Y^2 + (h^4 - w^2*r^2/(w^2 - h^2)))/6V = w^2*r^2*Y^2*h^4/(4 *(w^2 - h^2)^2)Lett = z - Np = -N^2q = -N^3 - VThen we gett^3 + 3pt + 2q = 0The discriminant of this cubic isD = q^2 + p^3When D > 0, a real root is obtained asz = N + cbrt(-q+sqrt(D)) + cbrt(-q-sqrt(D))When D < 0, a real root is obtained asz = N - 2m*cos(acos(-q/m^3)/3)wherem = sqrt(|p|) * sign(q)Given a real root Z of the cubic, the roots of the quartic are the rootsof the two quadraticsy^2 + ((b+A)/2)y + (Z + (bZ - d)/A) = 0where A = +/- sqrt(8Z + b^2 - 4c)b, c, d are the cubic, quadratic, and linear coefficients of the quarticSome experimentation is then required to determine which solutionscorrespond to the inner and outer boundaries.*/#define CACHESIZE 25static arcCacheRec arcCache[CACHESIZE];static unsigned long lrustamp;static arcCacheRec *lastCacheHit = &arcCache[0];#if 0static RESTYPE cacheType;/* * External so it can be called when low on memory. * Call with a zero ID in that case. *//*ARGSUSED*/intmiFreeArcCache (data, id)    gpointer	    data;    guint		    id;{    int k;    arcCacheRec *cent;    if (id)	cacheType = 0;    for (k = CACHESIZE, cent = &arcCache[0]; --k >= 0; cent++)    {	if (cent->spdata)	{	    cent->lrustamp = 0;	    cent->lw = 0;	    g_free(cent->spdata);	    cent->spdata = NULL;	}    }    lrustamp = 0;    return TRUE;}#endifstatic voidmiComputeCircleSpans(int lw, miArc *parc, miArcSpanData *spdata){    register miArcSpan *span;    int doinner;    register int x, y, e;    int xk, yk, xm, ym, dx, dy;    register int slw, inslw;    int inx = 0, iny, ine = 0;    int inxk = 0, inyk = 0, inxm = 0, inym = 0;    doinner = -lw;    slw = parc->width - doinner;    y = parc->height >> 1;    dy = parc->height & 1;    dx = 1 - dy;    MIWIDEARCSETUP(x, y, dy, slw, e, xk, xm, yk, ym);    inslw = parc->width + doinner;    if (inslw > 0)    {	spdata->hole = spdata->top;	MIWIDEARCSETUP(inx, iny, dy, inslw, ine, inxk, inxm, inyk, inym);    }    else    {	spdata->hole = FALSE;	doinner = -y;    }    spdata->count1 = -doinner - spdata->top;    spdata->count2 = y + doinner;    span = spdata->spans;    while (y)    {	MIFILLARCSTEP(slw);	span->lx = dy - x;	if (++doinner <= 0) 	{	    span->lw = slw;	    span->rx = 0;	    span->rw = span->lx + slw;	}	else	{	    MIFILLINARCSTEP(inslw);	    span->lw = x - inx;	    span->rx = dy - inx + inslw;	    span->rw = inx - x + slw - inslw;	}	span++;    }    if (spdata->bot)    {	if (spdata->count2)	    spdata->count2--;	else	{	    if (lw > (int)parc->height)		span[-1].rx = span[-1].rw = -((lw - (int)parc->height) >> 1);	    else		span[-1].rw = 0;	    spdata->count1--;	}    }}static voidmiComputeEllipseSpans(int lw, miArc *parc, miArcSpanData *spdata){    register miArcSpan *span;    double w, h, r, xorg;    double Hs, Hf, WH, K, Vk, Nk, Fk, Vr, N, Nc, Z, rs;    double A, T, b, d, x, y, t, inx, outx = 0.0, hepp, hepm;    int flip, solution;    w = (double)parc->width / 2.0;    h = (double)parc->height / 2.0;    r = lw / 2.0;    rs = r * r;    Hs = h * h;    WH = w * w - Hs;    Nk = w * r;    Vk = (Nk * Hs) / (WH + WH);    Hf = Hs * Hs;    Nk = (Hf - Nk * Nk) / WH;    Fk = Hf / WH;    hepp = h + EPSILON;    hepm = h - EPSILON;    K = h + ((lw - 1) >> 1);    span = spdata->spans;    if (parc->width & 1)	xorg = .5;    else	xorg = 0.0;    if (spdata->top)    {	span->lx = 0;	span->lw = 1;	span++;    }    spdata->count1 = 0;    spdata->count2 = 0;    spdata->hole = (spdata->top &&		 (int)parc->height * lw <= (int)(parc->width * parc->width) &&		    lw < (int)parc->height);    for (; K > 0.0; K -= 1.0)    {	N = (K * K + Nk) / 6.0;	Nc = N * N * N;	Vr = Vk * K;	t = Nc + Vr * Vr;	d = Nc + t;	if (d < 0.0) {	    d = Nc;	    b = N;	    if ( (b < 0.0) == (t < 0.0) )	    {		b = -b;		d = -d;	    }	    Z = N - 2.0 * b * cos(acos(-t / d) / 3.0);	    if ( (Z < 0.0) == (Vr < 0.0) )		flip = 2;	    else		flip = 1;	}	else	{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
a亚洲天堂av| 在线观看不卡视频| 色94色欧美sute亚洲线路一ni| 欧美日韩在线一区二区| 久久久久久久久久电影| 亚洲成av人片www| 成人国产一区二区三区精品| 欧美日韩激情一区| 亚洲色图欧洲色图婷婷| 韩国精品在线观看| 在线观看亚洲精品| 国产精品你懂的| 精品亚洲成a人在线观看| 欧美色网站导航| 国产精品久久久久精k8 | 国产xxx精品视频大全| 欧美日韩一区二区三区视频| 国产精品国产三级国产aⅴ中文 | 91网站在线观看视频| 精品盗摄一区二区三区| 轻轻草成人在线| 欧美日韩国产一级| 亚洲伊人色欲综合网| 99久久综合国产精品| 日本一区二区成人在线| 国产乱妇无码大片在线观看| 日韩欧美一区电影| 日本成人在线电影网| 欧美日韩国产精品成人| 午夜精品久久久| 欧美日韩国产综合草草| 性做久久久久久久久| 欧美少妇一区二区| 午夜久久久久久久久| 欧美精品色综合| 日韩av一区二区在线影视| 成人国产精品视频| 亚洲国产一二三| 欧美性猛交一区二区三区精品 | 亚洲免费色视频| 成人黄色小视频在线观看| 国产日韩欧美高清在线| 蜜臀a∨国产成人精品| 日韩欧美成人午夜| 国产麻豆日韩欧美久久| 精品国产乱码久久久久久久久| 美日韩一区二区| 欧美mv和日韩mv的网站| 国产成人高清在线| 中文字幕在线不卡一区 | 亚洲欧美激情在线| 欧美最新大片在线看| 亚洲高清视频在线| 精品欧美一区二区久久| 精品国产乱子伦一区| 一片黄亚洲嫩模| 欧美一区永久视频免费观看| 久久国产乱子精品免费女| 精品成人在线观看| 99r国产精品| 亚洲.国产.中文慕字在线| 日韩免费看的电影| 成人黄色在线看| 午夜欧美一区二区三区在线播放| 欧美成人猛片aaaaaaa| 国产不卡在线一区| 夜夜亚洲天天久久| 精品国产露脸精彩对白| 91网站在线播放| 免费成人小视频| 国产精品毛片大码女人| 欧美人动与zoxxxx乱| 国产乱色国产精品免费视频| 亚洲精品国产视频| 日韩欧美一区在线| 91免费观看视频| 久久99精品国产麻豆婷婷| 亚洲人成在线播放网站岛国| 欧美xingq一区二区| 91一区二区在线| 国产一区二区成人久久免费影院 | 久久久高清一区二区三区| 在线观看亚洲精品视频| 精品一区二区三区免费播放| 最新不卡av在线| 日韩一区二区三区在线观看| 91视频在线观看| 激情五月激情综合网| 亚洲高清在线视频| 中文字幕综合网| 久久久av毛片精品| 日韩视频国产视频| 在线精品视频免费播放| 成人动漫视频在线| 久久精品国产一区二区三区免费看| 国产精品短视频| 国产女主播视频一区二区| 日韩女同互慰一区二区| 欧美电影一区二区| 欧美丝袜丝交足nylons| 97精品国产露脸对白| 成人免费高清在线| 国产精品99久| 国产乱码精品一区二区三区五月婷 | 一区二区三区四区中文字幕| 日本一二三不卡| 久久久精品2019中文字幕之3| 日韩一二三区不卡| 欧美日韩国产小视频| 欧美亚洲愉拍一区二区| 91丨porny丨中文| 97国产一区二区| 99久久免费视频.com| 99视频一区二区| 99久久久无码国产精品| 99视频精品全部免费在线| 国产不卡视频一区| 成人在线综合网站| 成人av一区二区三区| 北条麻妃一区二区三区| 91在线porny国产在线看| 99精品视频在线观看| 欧美综合亚洲图片综合区| 91久久香蕉国产日韩欧美9色| 色哟哟国产精品免费观看| 在线观看成人免费视频| 欧美日韩视频在线观看一区二区三区 | 久久久国产精品麻豆| 欧美极品另类videosde| 国产精品家庭影院| 亚洲一区二区偷拍精品| 午夜精品福利在线| 激情av综合网| 成人亚洲一区二区一| 色婷婷综合久久久中文一区二区| 日本高清不卡一区| 3d成人动漫网站| 国产日产欧美精品一区二区三区| 欧美激情资源网| 一区二区三区视频在线看| 午夜日韩在线电影| 国产精品一区二区91| 9久草视频在线视频精品| 欧美三级日本三级少妇99| 欧美成人一区二区三区片免费| 2017欧美狠狠色| 一区二区三区美女视频| 免费观看在线色综合| 成人午夜精品在线| 欧美日韩一区二区三区免费看| 欧美精品一区二区高清在线观看 | 日韩一区二区在线播放| 欧美国产亚洲另类动漫| 亚洲国产精品一区二区www | 日本一区二区电影| 亚洲国产另类精品专区| 国产一区二区三区精品欧美日韩一区二区三区 | 欧美三级资源在线| 国产亚洲精久久久久久| 亚洲自拍都市欧美小说| 国产成人午夜片在线观看高清观看| 色综合久久天天| 久久久欧美精品sm网站| 亚洲国产另类av| 成人综合激情网| 精品国产青草久久久久福利| 亚洲精品国产无套在线观| 国产黄人亚洲片| 欧美蜜桃一区二区三区| 国产精品国产a级| 国产在线不卡一卡二卡三卡四卡| 欧美三区在线视频| √…a在线天堂一区| 国产在线观看一区二区| 欧美一级二级在线观看| 亚洲免费在线视频一区 二区| 国产美女主播视频一区| 337p亚洲精品色噜噜狠狠| 亚洲伦在线观看| 顶级嫩模精品视频在线看| 日韩欧美一级片| 日韩精品视频网| 精品视频1区2区| 一区二区三区中文字幕精品精品 | 一区二区三区国产精品| 国产成人免费视频| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 精品久久久久久无| 日韩中文字幕av电影| 在线观看亚洲精品| 一区二区三区精品| 在线观看免费视频综合| 亚洲美女视频一区| 91在线观看下载| 亚洲精品成人精品456| 96av麻豆蜜桃一区二区| 综合久久综合久久| 91视频你懂的| 一区二区三区中文在线观看| 色婷婷av一区二区三区gif|