arc.c
来自「<B>Digital的Unix操作系统VAX 4.2源码</B>」· C语言 代码 · 共 68 行
C
68 行
#ifndef lintstatic char SccsId[] = " @(#)arc.c 4.1 (ULTRIX) 7/2/90";#endif not(lint)/* * Modification History * * April-11-1989, Pradeep Chetal * Added changes from 4.3Tahoe BSD for lots of new drivers *//* * Copyright (c) 1980 Regents of the University of California. * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */#ifndef lintstatic char sccsid[] = "@(#)arc.c 5.1 (Berkeley) 5/7/85";#endif not lint#include "hp2648.h"arc(xcent,ycent,xbeg,ybeg,xend,yend)int xcent,ycent,xbeg,ybeg,xend,yend;{ double costheta,sintheta,x,y,xn,r; double x1,y1,x2,y2; int xi,yi,crosspflag,crossp; r = (xcent-xbeg)*(xcent-xbeg)+(ycent-ybeg)*(ycent-ybeg); r = pow(r,0.5); if(r<1){ point(xcent,ycent); return; } sintheta = 1.0/r; costheta = pow(1-sintheta*sintheta,0.5); xi = x = xbeg-xcent; yi = y = ybeg-ycent; x1 = xcent; y1 = ycent; x2 = xend; y2 = yend; crosspflag = 0; do { crossp = cross_product(x1,y1,x2,y2,x,y); if(crossp >0 && crosspflag == 0) crosspflag = 1; point(xcent+xi,ycent+yi); xn = x; xi = x = x*costheta + y*sintheta; yi = y = y*costheta - xn*sintheta; } while( crosspflag == 0 || crossp >0);}cross_product(x1,y1,x2,y2,x3,y3)double x1,x2,x3,y1,y2,y3;{ double z,a,b; a = (y3-y2)*(x2-x1); b = (x3-x2)*(y2-y1); z = a-b; if(z<0) return(-1); if(z>0) return(1); return(0);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?