📄 ibgd1d.c
字号:
/* last edit: Ilja Schmelzer -------------- 10-JUN-1994 15:04:55.40 */
/************************************************************************/
/* */
/* <<< I B G >>> - Intersection - Based Grid generation package */
/* */
/* Version 1.1 by Ilja Schmelzer schmelzer@iaas-berlin.d400.de */
/* */
/* to be distributed under IBG license conditions (see "readme.ibg") */
/* */
/************************************************************************/
/* <<< ibgD1D >>> - Intersection-Based Geometry - 1D intersection of 3D geom.
*/
#include "ibglib.h"
#include "ibgd.h"
#include "ibgi.h"
#include "ibg.h"
#include "ibgd0.h"
#include "ibgdefault.h"
typedef struct{
ibGeometryRec g;
ibGeometry gold;
ibgFloat y;
ibgFloat z;
}ibgD1DRec,*ibgD1D;
static int RegionOfPoint(ibGeometry g, ibgPoint *nint, ibgPoint *nold)
{ibgD1D gz = (ibgD1D )g;
ibgFloat y0,y1,z0,z1;
int rc;
y0 = ibgpX(*nint)[1];
z0 = ibgpX(*nint)[2];
ibgpX(*nint)[1] = gz->y;
ibgpX(*nint)[2] = gz->z;
if(nold){
y1 = ibgpX(*nold)[1];
z1 = ibgpX(*nold)[2];
ibgpX(*nold)[1] = gz->y;
ibgpX(*nold)[2] = gz->z;
}
rc = ibgiRegionOfPoint(gz->gold,nint,nold);
ibgpX(*nint)[1] = y0;
ibgpX(*nint)[2] = z0;
if(nold){
ibgpX(*nold)[1] = y1;
ibgpX(*nold)[2] = z1;
}
return rc;
}
static int FaceWithEdge(ibGeometry g, ibgPoint *nint,
ibgPoint *n1, ibgPoint *n2)
{ibgD1D gz = (ibgD1D )g;
ibgDouble xx,dx,pp,y1,y2,z1,z2;
int rc;
y1 = ibgpX(*n1)[1];
y2 = ibgpX(*n2)[1];
z1 = ibgpX(*n1)[2];
z2 = ibgpX(*n2)[2];
ibgpX(*n1)[1] = gz->y;
ibgpX(*n2)[1] = gz->y;
ibgpX(*n1)[2] = gz->z;
ibgpX(*n2)[2] = gz->z;
rc = ibgiFaceWithEdge(gz->gold,nint,n1,n2);
ibgpX(*n1)[1] = y1;
ibgpX(*n2)[1] = y2;
ibgpX(*n1)[2] = z1;
ibgpX(*n2)[2] = z2;
dx = ibgpX(*n2)[0] - ibgpX(*n1)[0];
xx = ibgpX(*nint)[0] - ibgpX(*n1)[0];
if(dx == 0.0) pp = 0.0;
else pp = xx/dx;
ibgpX(*nint)[2] = y1 + pp*(y2-y1);
ibgpX(*nint)[2] = z1 + pp*(z2-z1);
return rc;
}
static int Free(ibGeometry g)
{ibgD1D gz=((ibgD1D )g);
ibgdFree(gz->gold);
return ibgSuccess;
}
static ibGeometryClassRec ibgD1DClass;
ibGeometry ibgd1D(ibGeometry gold, ibgFloat z)
{ibgD1DRec *fnc;
fnc = malloc(sizeof(ibgD1DRec));
fnc->gold = gold;
fnc->z = z;
ibgdInitialize((ibGeometry)fnc,&ibgD1DClass);
ibgD1DClass.RegionOfPoint = (ibgdFunctionRegionOfPoint) RegionOfPoint;
ibgD1DClass.FaceWithEdge = (ibgdFunctionFaceWithEdge)FaceWithEdge;
ibgD1DClass.Free = Free;
return (ibGeometry)fnc;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -