-
人为规定主辅断层,是否尖灭,读取表格,选取主次。
-
去判断分支型还是十字型
-
- 用两个二维数组分别存储断层的XY。
- 表格一行一列,尖灭 1 ,正常0。
- 尖灭:表格数据相邻两行,包括首尾,都需要计算线段求交。
- 正常:中间的上下 不参与求交。
- 计算参数,写一个函数。
- 写一个函数,去求交点。
-
四个交点:十字型 cross
-
两个交点或者没交点:分支型。
判断主辅断层以及是否尖灭,单尖灭或者双尖灭
Main Fault 主断层,Assistant Fault辅断层。
pinch 尖灭
主断层:MF =0
辅断层无尖灭点:AF=1
辅断层有一个尖灭点:AFS=2
辅断层有两个尖灭点:AFD=3
设置数组记录主断层的最终数据。
1、用主断层点数据,相邻两点形成的线段,依次(数据表格由上至下为逆顺序)对辅断层求交。用List(CVertex)保存交点,如果是有一个交点(如1端点和2端点间),交点直接放在1端点后,再判断(2和3端点)有无交点,若无直接剔除,如果有则插入到2后,再剔除(flag=1)。若无继续判断3和4有无交点(此时flag为1),若有则交点放在3后,直接剔除3。(flag=0)。如果是有两个个交点(如1端点和2端点间),计算两交点和1端点的距离,由小至大排在1端点后。第一个计算出的交点为主交点,第二个算出的为次交点。主次交点间的主断层点去除。
2、对于辅断层来说,辅断层的线段和主断层的线段有交点,并进行逆时针插入,所需要的数据就是主交点按逆时针顺序到次交点之间的所有点。
3、对于辅断层来说,辅断层的线段和主断层的线段有交点,分别存储主辅断层两端点和交点数据,主断层(FirstJ11,FirstJ12,J1p和FirstJ21,FirstJ22,J2p),辅断层(SecondJ11,SecondJ12,J1p和Second21,Second22,J2p),利用辅断层的两个端点分别计算端点到主断层两盘直线距离的和,舍弃数值小的那一端。无交点的另一盘需要求直线方程的两端点索引 由求出有交点的 两端点索引号+(离散点个数/2 取整数)。如果舍弃的是排序在前的点。交点插在其后,
1、如果只有一个交点,调出辅断层所有端点,每个端点分别对主断层求交,并且取最短距离,最后存储距离最短的两个端点,保存相交的主断层线段和交点,并赋予主次交点。
1.主断层循环,最后只有一个交点,无法判断主次。其余端点计算距离,取最小值。保留相交主断层线段和其交点,根据插入序号判断主次,进行主断层端点删除标记和辅助断层 CvertexList的整合,进行处理。
写个函数
主断层的两盘用线段两端点各求一条直线,例如断层其中一盘的两点(SecondJ11和SecondJ12)求到两直线距离之和(Dis1,Dis2),保留大的那一个端点。比如这里保留SecondJ11,SecondJ21。
辅断层的两盘用线段两端点各求一条直线,例如断层其中一盘的两点(FirstJ11和FirstJ12)求到两直线距离之和(Dis1,Dis2),保留大的那一个端点。比如这里保留FirstJ11,FirstJ21。
线段的两端点,舍弃两盘间的端点。写个函数
最后保留的数据:SecondJ11,SecondJ21,J1p ,J2p,FirstJ11,FirstJ21。
2、无交点:
3、一个交点
辅断层无交点的那一盘直线方程与主断层存在交点的一盘的直线方程求交。补充缺失点数据。
一对离散点,逆时针闭合。
主断层逆时针排序,去除内部点,插入交点,更新离散点数据。交点安保留端点距离排逆顺序。
每个交点记录分支断层其中一盘的保留点,分支断层点也按逆时针排序。数组顺序,为逆时针顺序。碰到第一个交点,按顺序读取,碰到第二个交点按逆序读取。
主断层一个类,逆时针排序的数组。
交点类:保留跟随的所有点。
辅断层一个类:记录逆时针顺序和交点。
原始的 x y z
-
v.x = (x-4090000)/100; v.y = (y-38530000)/100; v.z = z/100;
x=v.y*100-5000;
y=v.x*100;
z=v.z*100;
此时已经是Taplayer的格式。2000+ 4000+ -100+
out.write(x + " " + y + " " + z + " ");
tmpvertices.set(i*3,(x)/scale-40);
tmpvertices.set(i*3+1,z/scale);
tmpvertices.set(i*3+2,-(y )/scale+60);
rtvertices.X=x;
rtvertices.Y=-z;
rtvertices.Z=y;
tmpvertices.set(i*3,(x)/scale-40);
tmpvertices.set(i*3+1,z/scale);
tmpvertices.set(i*3+2,-(y )/scale+60);
//initial
GeoStructure tmplayers = new GeoStructure();
tmplayers.name = "layer"+ String.valueOf(j+1);
tmplayers.indices = tmpindices;
double minx = Double.MAX_VALUE;
double miny = Double.MAX_VALUE;
double minz = Double.MAX_VALUE;
double maxx = 0;
double maxy = 0;
double maxz = 0;
for(int i=0;i<pnum;++i)
{
if (maxx < tmpvertices.get(i*3))
{
maxx = tmpvertices.get(i*3);
}
if (maxy < tmpvertices.get(i*3+1))
{
maxy = tmpvertices.get(i*3+1);
}
if (maxz < tmpvertices.get(i*3+2))
{
maxz = tmpvertices.get(i*3+2);
}
if (minx > tmpvertices.get(i*3))
{
minx = tmpvertices.get(i*3);
}
if (miny > tmpvertices.get(i*3+1))
{
miny = tmpvertices.get(i*3+1);
}
if (minz > tmpvertices.get(i*3+2))
{
minz = tmpvertices.get(i*3+2);
}
}
double scale = globleScale;
double xhorizon = maxx - minx;
double yhorizon = maxy - miny;
double zhorizon = maxz - minz;
List<Integer> tmpnormals = new ArrayList<Integer>() ;
// System.out.println(texturePaths.get(j+1));
if( texturePaths.get(j+1)!=null)
{
tmplayers.texturePath = texturePaths.get(j+1);
List<Double> tmpuvs = new ArrayList<Double>() ;
for(int i=0;i<pnum;++i)
{
tmpnormals.add(0);
tmpnormals.add(0);
tmpnormals.add(1);
double x =tmpvertices.get(i*3);
double y =tmpvertices.get(i*3+1);
double z =tmpvertices.get(i*3+2);
double u =(x-minx)/xhorizon;
double v =(y-miny)/yhorizon;
if (u > 1.0)
{
u = 1.0;
}
if (v > 1.0)
{
v = 1.0;
}
tmpuvs.add(u);
tmpuvs.add(v);
// double[] coorxy = MineModel.projectTransform(x+GlobalVariable.mm.getOriPoint().x,y+GlobalVariable.mm.getOriPoint().y,GlobalVariable.mm.getEpsg(),"EPSG:3857");
// x = coorxy[0];
// y = coorxy[1];
tmpvertices.set(i*3,(x - minx - (maxx-minx)/2)/scale);
tmpvertices.set(i*3+1,(z*wgl_zScale)/scale);
tmpvertices.set(i*3+2,-(y- miny - (maxy-miny)/2)/scale);
}
tmplayers.uvs = tmpuvs;
}else{
List<Double> tmpuvs = new ArrayList<Double>() ;
tmplayers.uvs = tmpuvs;
for(int i=0;i<pnum;++i)
{
tmpnormals.add(0);
tmpnormals.add(0);
tmpnormals.add(1);
double x =tmpvertices.get(i*3);
double y =tmpvertices.get(i*3+1);
double z =tmpvertices.get(i*3+2);
// double[] coorxy = MineModel.projectTransform(x+GlobalVariable.mm.getOriPoint().x,y+GlobalVariable.mm.getOriPoint().y,GlobalVariable.mm.getEpsg(),"EPSG:3857");
// x = coorxy[0];
// y = coorxy[1];
tmpvertices.set(i*3,(x)/scale-40);
tmpvertices.set(i*3+1,z/scale);
tmpvertices.set(i*3+2,-(y )/scale+60);
}
}
tmplayers.normals = tmpnormals;
tmplayers.vertices = tmpvertices;
for(int i=0;i<tmplayers.vertices.size()/3;i++){
rtvertices.add(tmplayers.vertices.get(i*3+2));
rtvertices.add(-tmplayers.vertices.get(i*3));
rtvertices.add(tmplayers.vertices.get(i*3+1));
}
tmplayers.setRtvertices(rtvertices);
rtn.add(tmplayers);
rtvertices=new ArrayList<>();
QF1的问题:在内部只有一个交点,不用考虑最后一个点和起始点的问题。但是怎么处理判断交点个数的问题
辅断层一个线段的直线可能交到2分以上的主断层线段。应该以交点距离取舍,不能到端点或者直线的距离会出错。
无交点 删除序号 没问题
无交点 焦点序列
单交点删除序号
单交点焦点序列
双交点删除序号
双脚点交点xu'lie
2、纹理贴图方式2种: 1)整体贴图,如地表; 2)小图例的“重复贴图”(具体名称请查询确认),如巷道、地层。
3、其中,2)小图例的“重复贴图”的条件: 1)是否适用于各种形状的三角形? 2)如果不能1)不能,则请理论或数据测试证明:三角形必须是规整的。
4、如果3、2)证明确实需要三角形是正规的,则优化巷道、地层的三角形。 (迫不得已不使用本优化三角形方案,因为优化的结果会增加三角形大数量)