网站大量收购独家精品文档,联系QQ:2885784924

第2章 计算机图形学(精品·公开课件).ppt

第2章 计算机图形学(精品·公开课件).ppt

  1. 1、本文档共81页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.7 基本几何的建立--基本原理 过P1和P2两点的直线方程是: (y2-y1)(x-x1)-(x2-x1)(y-y1)=0 令: a= (y2-y1)/D b= - (x2-x1)/D c= - (ax1+by1) 若两点连线与X轴的夹角为α,则有: a=sinα,b= -cosα,且a2+b2=1 过P1P2两点的直线方程可记为: ax+by+c=0 或 -(ax+by+c)=0 为保证向量P1P2的左侧为负区域,需要在上述两式中选取一式。 1、过两点的有向直线方程系数的求取 2.7 基本几何的建立 构造一点位于向量P1P2左侧的点P(xp,yp),由P2绕P1逆时针旋转90°得到,有 xp=x1-Dcos(90-α)=x1-Dsinα= x1-D·a yp=y1+Dsin(90-α)=y1+Dcosα=y1-D·b 点P(xp,yp )到直线的距离dp分别为: dp=a(x1-D·a)+b(y1-D·b)+c=(a x1+b y1+c)-D(a2+b2) = 0 - D·1= -D 0 dp=-a(x1-D·a)-b(y1-D·b)-c= -(a x1+b 1+c)+D(a2+b2) = 0 + D·1 = +D 0 显然,为了保证直线的左侧为负,直线方程必须选取 :ax+by+c=0 2.7 基本几何的建立 过两个已知点P1P2建立直线,使直线的左侧为负。 int lpp(x1,y1,x2,y2,*a,*b,*c) 输入: float x1,y1,x2,y2 //直线起点,终点坐标 输出: float *a,*b,*c //所求直线的法线式方程系数 (a2+b2=1) 返回值: 1 正确返回 0 P1=P2,(a,b,c) 值无效 2.7 基本几何的建立 *a=y2-y1; *b=x1-x2; *c=sqrt((*a)*(*a)+(*b)*(*b)); if (*c Eps) { *a=(*a) / (*c); *b=(*b) / (*c); *c= -(*a)*x1 - (*b)*y1; return(1); // normal exit } else { // same point *a=0.0, *b=1.0, *c=-y1; return(0); } } 2.7 基本几何的建立 2、过一给定点且与x轴夹角为α直线方程系数求取 建立点斜式方程: 过一给定点P(xp,yp)且与X轴的夹角为α的直线,它的左侧为负区域。 int lpax(float xp,float yp,float alpha, float *a,float *b,float *c) { *a= sin(alpha); *b= -cos(alpha); *c= -(*a*xp + *b*yp); return (1); } 2.7 基本几何的建立 3、已知劣弧段的起点P1和终点P2及有向半径R,求包含该劣弧段的圆 圆心在P1P2的中垂线L上 在以P1为圆心,R为半径的圆C上 将L与C求交,得出两个可选圆心 根据圆弧段为劣弧,因此弧P1P2Pc 的符号与有向半径R的相同。 P2 P1 c1 c2 R L c 2.7 基本几何的建立 Int pppr(float x1,float y1,float x2,float y2,float r,float xc,float yc) { float dx,dy,s; dx=x2-x1; dy=y2-y1; s=fabs(dx)+fabs(dy); if(sEpsL) return (0); //两点共点,无效返回 s=dx*dx+dy*dy; s=4.*r/s*r-1.; if(s-Eps) return(0); //两点距离大于直径无效返回 if(fabs(s)=Eps) { //半圆 xc=(x1+x2)/2.0; yc=(y1+y2)/2.0; } else { s=sqrt(s); s=-sign(s,r); xc=((x1+x2)+dy*s)/2.0; yc=((y1+y2)-dx*s)/2.0; } return(1); } P2 P1 c1 c2 R 0 α

您可能关注的文档

文档评论(0)

秦圈圈 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档