亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
精品国产污网站| 99久久精品免费看国产 | 成人av电影在线网| 日本一区二区动态图| 国产91精品久久久久久久网曝门| 国产日韩欧美精品在线| 欧美一区二区视频在线观看2022| 免费成人在线影院| 久久蜜桃av一区精品变态类天堂| 成人免费毛片高清视频| 亚洲综合清纯丝袜自拍| 欧美日韩国产中文| 国产精品综合av一区二区国产馆| 国产日本欧美一区二区| 色偷偷成人一区二区三区91| 午夜av电影一区| 精品国产乱码久久久久久蜜臀| 国产a久久麻豆| 亚洲 欧美综合在线网络| 日韩欧美中文字幕精品| www.欧美.com| 日韩经典一区二区| 国产视频在线观看一区二区三区| 92精品国产成人观看免费| 午夜精品久久久久久久久久 | 国产精品美女久久久久久2018| 91麻豆产精品久久久久久| 日韩av一区二区三区四区| 国产精品午夜春色av| 欧美日韩一卡二卡三卡| 成人一区二区三区在线观看| 亚洲国产欧美一区二区三区丁香婷| 精品乱码亚洲一区二区不卡| 色婷婷狠狠综合| 国产一区二区伦理| 亚洲国产毛片aaaaa无费看| 久久午夜老司机| 欧美吞精做爰啪啪高潮| 丁香六月综合激情| 美洲天堂一区二卡三卡四卡视频| 亚洲欧美视频一区| 26uuu国产一区二区三区| 色综合婷婷久久| 国产伦精品一区二区三区在线观看 | 国产欧美日韩三级| 日韩一区二区三区四区| 色综合久久99| 成人黄色777网| 国产一区二三区好的| 日韩国产精品91| 亚洲一区二区三区在线播放 | 亚洲欧美成aⅴ人在线观看| 久久免费精品国产久精品久久久久| 欧美自拍偷拍一区| 99久久婷婷国产综合精品| 久久精品72免费观看| 日韩综合小视频| 亚洲一区二区影院| 一区二区三区在线免费| 中文字幕av在线一区二区三区| 日韩欧美电影一区| 日韩午夜激情电影| 91精品国产综合久久福利 | 高清不卡一区二区| 久久精品久久久精品美女| 亚洲444eee在线观看| 亚洲主播在线播放| 亚洲综合激情小说| 亚洲成a人片综合在线| 亚洲激情在线播放| 一区二区在线观看视频 | 久久精品一区蜜桃臀影院| 精品国产乱码久久久久久图片 | 99麻豆久久久国产精品免费| 大桥未久av一区二区三区中文| 国产一区二区三区四区五区美女| 美女任你摸久久 | 中文字幕在线不卡视频| 亚洲视频一二三| 自拍偷拍欧美精品| 一区二区欧美视频| 亚洲福利国产精品| 水蜜桃久久夜色精品一区的特点 | 一本色道**综合亚洲精品蜜桃冫| 99国产精品国产精品久久| 一级日本不卡的影视| 久久99精品国产麻豆婷婷| 丝袜亚洲另类欧美| 日韩高清不卡在线| 久久99国产精品久久99果冻传媒| 极品瑜伽女神91| 成人免费视频播放| 91免费版在线| 欧美日韩国产免费| 欧美第一区第二区| 国产精品天天看| 亚洲午夜久久久| 美女视频黄a大片欧美| 粉嫩嫩av羞羞动漫久久久 | 国产精品第一页第二页第三页| 国产精品每日更新| 一区二区三区在线免费视频| 日韩高清不卡一区二区三区| 国内精品免费**视频| 菠萝蜜视频在线观看一区| 在线观看网站黄不卡| 欧美一区二区视频在线观看 | 亚洲国产精品久久久久秋霞影院| 亚洲成av人片www| 国产一区二区精品在线观看| 一本一本大道香蕉久在线精品| 7777女厕盗摄久久久| 久久精品日韩一区二区三区| 中文字幕字幕中文在线中不卡视频| 亚洲成人激情自拍| 成人污污视频在线观看| 91激情五月电影| 欧美精品一区二区三区视频| 日韩美女啊v在线免费观看| 免费高清不卡av| 色综合一个色综合| 久久先锋影音av鲁色资源网| 亚洲一区日韩精品中文字幕| 国产精品一区久久久久| 精品视频在线看| 国产精品久久久爽爽爽麻豆色哟哟 | 欧美性视频一区二区三区| 国产色婷婷亚洲99精品小说| 亚洲图片自拍偷拍| 福利一区在线观看| 久久超碰97中文字幕| 日韩三级视频中文字幕| 美国十次了思思久久精品导航| 精品嫩草影院久久| 日本系列欧美系列| 成人ar影院免费观看视频| 色成年激情久久综合| 日韩亚洲欧美一区二区三区| 成人免费在线播放视频| 麻豆成人av在线| 91精品福利在线| 国产精品色在线| 国产在线视频不卡二| 欧美精品在线一区二区三区| 一区二区三区**美女毛片| 波多野结衣中文一区| 久久久亚洲国产美女国产盗摄| 日本最新不卡在线| 欧美性xxxxxxxx| 中文字幕一区二区日韩精品绯色| 国产高清成人在线| 日韩精品综合一本久道在线视频| 亚洲国产日韩综合久久精品| 91影视在线播放| 亚洲天天做日日做天天谢日日欢| 国产成人亚洲精品狼色在线| 久久久亚洲精品石原莉奈| 精久久久久久久久久久| 日韩精品一区二区三区蜜臀| 日韩激情一二三区| 欧美日韩色一区| 亚洲bdsm女犯bdsm网站| 欧美精品第一页| 天堂蜜桃91精品| 国产精品免费网站在线观看| 久久99日本精品| 久久亚洲精品小早川怜子| 国产精品99精品久久免费| 国产性做久久久久久| 国产成人夜色高潮福利影视| 国产女人水真多18毛片18精品视频| 国产乱人伦精品一区二区在线观看| 精品乱人伦小说| 国产98色在线|日韩| 国产精品网站在线播放| 91天堂素人约啪| 亚洲夂夂婷婷色拍ww47| 欧美日韩欧美一区二区| 奇米精品一区二区三区四区 | 久久aⅴ国产欧美74aaa| 日韩一区二区三区视频在线 | 久久久影视传媒| 成人黄色电影在线| 亚洲精品乱码久久久久久| 色婷婷精品久久二区二区蜜臂av| 亚洲午夜在线观看视频在线| 91精品中文字幕一区二区三区| 日韩va亚洲va欧美va久久| 精品剧情在线观看| 粉嫩绯色av一区二区在线观看| 国产拍欧美日韩视频二区| 99在线热播精品免费| 亚洲国产va精品久久久不卡综合| 69堂精品视频| 韩国av一区二区| 1区2区3区精品视频| 欧洲色大大久久| 韩国欧美一区二区| 一区二区三区蜜桃| 欧美va天堂va视频va在线|