⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utilarcendpoints.c

📁 Pro.TOOLKIT.Wildfire插件设计.配套光盘-141M.zip
💻 C
字号:
/*====================================================================*\    FILE:		UtilArcEndPoints.c    PURPOSE:		This is the part of the pt_examples. 			See uarc_endpts.c in Pro/DEVELOP.HISTORY:DATE      BUILD   AUTHOR    MODIFICATIONS19 Jan 97 H-01-21 Alexey    $$1   First version.05-Oct-97 H-03-25 Pavel	    $$2	  Used new style declaration\*====================================================================*//*--------------------------------------------------------------------*\    Pro/TOOLKIT includes\*--------------------------------------------------------------------*/#include "ProToolkit.h"#include "UtilMath.h"/*--------------------------------------------------------------------*\    Pro/DEVELOP includes\*--------------------------------------------------------------------*//*--------------------------------------------------------------------*\    C System includes\*--------------------------------------------------------------------*/#include <math.h>/*--------------------------------------------------------------------*\    Application includes\*--------------------------------------------------------------------*//*--------------------------------------------------------------------*\    Macros\*--------------------------------------------------------------------*//*--------------------------------------------------------------------*\    Data types\*--------------------------------------------------------------------*//*--------------------------------------------------------------------*\    Application global/external data\*--------------------------------------------------------------------*//*---------------------------------------------------------------------*\    Functions declaration\*---------------------------------------------------------------------*//*---------------------------------------------------------------------*\    Function:	ProUtilArc3Points()	( former user_arc_3pts() )    Purpose:	Create an arc from 3 points    Returns:	1 - success; 0 - error.\*---------------------------------------------------------------------*/int ProUtilArc3Points(    double pnt1[3],    double pnt2[3],     double pnt3[3],     double *p_rad,     double center[3]){double	vec_a[3], vec_b[3], vec_c[3];double	len_a, len_b, unit_a[3], unit_b[3];double  a_dot_b, a_x_b_sq, a_x_b[3];double  radius, c0, c1;		/*  Form unit vector a  */	ProUtilVectorDiff(pnt3, pnt2, vec_a);	len_a = ProUtilVectorLength(vec_a);	ProUtilVectorNormalize(vec_a, unit_a);		/*  Form unit vector b  */	ProUtilVectorDiff(pnt1, pnt2, vec_b);	len_b = ProUtilVectorLength(vec_b);	ProUtilVectorNormalize(vec_b, unit_b);	if( len_a != 0.0 && len_b != 0.0 )	  {		ProUtilVectorCross(unit_a, unit_b, a_x_b);		a_x_b_sq = ProUtilVectorDot(a_x_b, a_x_b);		a_dot_b  = ProUtilVectorDot(unit_a, unit_b);	  }	else		a_dot_b = 0.0;		/*  Check for a straight line  */	if( len_a == 0.0 || len_b == 0.0 || a_x_b_sq < 1.0e-10 )		{	*p_rad = radius = 10e+10;	return(0);	}		/*  Arc radius  */	c0 = sqrt(a_x_b_sq);	ProUtilVectorDiff(vec_a,vec_b,vec_c);	radius = ProUtilVectorLength(vec_c) / (2.0 * c0);	*p_rad = radius;		/*  Arc center  */	c0 = 0.5 * (1.0 - a_dot_b * len_b / len_a) / a_x_b_sq;	c1 = 0.5 * (1.0 - a_dot_b * len_a / len_b) / a_x_b_sq;	ProUtilVectorsLincom(c0, vec_a, c1, vec_b, vec_c);	ProUtilVectorSum(pnt2, vec_c, center);	return(1);}/*---------------------------------------------------------------------*\    Function:	ProUtilArcEndPoints() (former user_arc_endpts() )    Purpose:	Arc is drawn CCW, from end1 to end2    Returns:	1 - success; 0 - error.\*---------------------------------------------------------------------*/int ProUtilArcEndPoints(    double x1, double y1, double z1,     double x2, double y2, double z2,     double x3, double y3, double z3,     double cx, double cy, double cz,     double end1[3], double end2[3]){     double tw1 = 0.0, tw3 = 0.0, tw2 = 0.0;		/*  Check if point 1 is on center  */	if (y1 != cy || x1 != cx)	   tw1 = atan2(y1-cy,x1-cx);    		if (tw1 < 0.0) tw1 += TWOPI;		/*  Check if point 2 is on center  */	if (y2 != cy || x2 != cx)	   tw2 = atan2(y2-cy,x2-cx);    		if (tw2 < 0.0) tw2 += TWOPI; 		/*  Check if point 3 is on center  */	if (y3 != cy || x3 != cx)	   tw3 = atan2(y3-cy,x3-cx);    		if (tw3 < 0.0) tw3 += TWOPI;   if ( ((tw3 > tw1) && (tw3 > tw2)) || ((tw3 < tw1) && (tw3 < tw2)) )      {       if (tw2 > tw1)			/*  Switch endpoints  */	 {	end1[0] = x2;   end1[1] = y2;   end1[2] = z2;	end2[0] = x1;   end2[1] = y1;   end2[2] = z1;	 }       else				/*  Same endpoints  */	 {	end1[0] = x1;   end1[1] = y1;   end1[2] = z1;	end2[0] = x2;   end2[1] = y2;   end2[2] = z2;	 }      }   else     {      if (tw2 > tw1)			/*  Same endpoints  */	{	end1[0] = x1;   end1[1] = y1;   end1[2] = z1;	end2[0] = x2;   end2[1] = y2;   end2[2] = z2;	}      else				/*  Switch endpoints  */	{	end1[0] = x2;   end1[1] = y2;   end1[2] = z2;	end2[0] = x1;   end2[1] = y1;   end2[2] = z1;	}     }	return(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -