\r
//sicherheitsabfragen zu Datengroessen\r
if (nrhs != 2)\r
- mexErrMsgTxt("expected (coordinates(Nx3),elements(Mx3))");\r
+ mexErrMsgTxt("expected (coordinates(Nx3),elements(Mx4))");\r
if (nlhs > 1)\r
mexErrMsgTxt("has only one output argument");\r
\r
mexErrMsgTxt("expected coordinates (Nx3)");\r
int em = mxGetM(prhs[1]);\r
int en = mxGetN(prhs[1]);\r
- if (en != 3)\r
- mexErrMsgTxt("expected elements (Mx3)");\r
+ if (en != 4)\r
+ mexErrMsgTxt("expected elements (Mx4)");\r
//Vorbereitung der Daten\r
\r
plhs[0] = mxCreateDoubleMatrix(em, em, mxREAL);\r
\r
double * x0 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
double * x1 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
+ double * x2 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
double * x3 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
double * xn = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
double * xa = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
\r
double * y0 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
double * y1 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
+ double * y2 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
double * y3 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
double * yn = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
double * ya = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
x1[1] = C[cm + (int) E[em + j] - 1];\r
x1[2] = C[2 * cm + (int) E[em + j] - 1];\r
\r
- x3[0] = C[(int) E[2 * em + j] - 1];\r
- x3[1] = C[cm + (int) E[2 * em + j] - 1];\r
- x3[2] = C[2 * cm + (int) E[2 * em + j] - 1];\r
+ x2[0] = C[(int) E[2 * em + j] - 1];\r
+ x2[1] = C[cm + (int) E[2 * em + j] - 1];\r
+ x2[2] = C[2 * cm + (int) E[2 * em + j] - 1];\r
+\r
+ x3[0] = C[(int) E[3 * em + j] - 1];\r
+ x3[1] = C[cm + (int) E[3 * em + j] - 1];\r
+ x3[2] = C[2 * cm + (int) E[3 * em + j] - 1];\r
\r
for (i = 0; i<3;++i)\r
xa[i] = x1[i] - x0[i];\r
dt[i] = - x0[i];\r
}else{\r
for (i = 0; i<3;++i)\r
- dt[i] = - x1[i];\r
+ dt[i] = - x3[i];\r
}\r
}else{\r
if(xb[rxb]>0){\r
for (i = 0; i<3;++i)\r
- dt[i] = - x3[i];\r
+ dt[i] = - x1[i];\r
}else{\r
- //for (i = 0; i<3;++i)\r
- // d[i] = - x2[i];\r
- printf("Error! Daten existieren nicht. Zugriff auf vierten punkt");\r
+ for (i = 0; i<3;++i)\r
+ dt[i] = - x2[i];\r
+ //printf("Error! Daten existieren nicht. Zugriff auf vierten punkt");\r
}\r
}\r
\r
-\r
+ //for (i=0;i<3;++i)\r
+ // dt[i] = 0;\r
\r
\r
// printf("(%d n- %f | %f | %f)\n",j,xn[0],xn[1],xn[2]);\r
y1[1] = C[cm + (int) E[em + k] - 1];\r
y1[2] = C[2 * cm + (int) E[em + k] - 1];\r
\r
- y3[0] = C[(int) E[2 * em + k] - 1];\r
- y3[1] = C[cm + (int) E[2 * em + k] - 1];\r
- y3[2] = C[2 * cm + (int) E[2 * em + k] - 1];\r
+ y2[0] = C[(int) E[2 * em + k] - 1];\r
+ y2[1] = C[cm + (int) E[2 * em + k] - 1];\r
+ y2[2] = C[2 * cm + (int) E[2 * em + k] - 1];\r
+\r
+ y3[0] = C[(int) E[3 * em + k] - 1];\r
+ y3[1] = C[cm + (int) E[3 * em + k] - 1];\r
+ y3[2] = C[2 * cm + (int) E[3 * em + k] - 1];\r
\r
for (i = 0; i<3;++i)\r
ya[i] = y1[i] - y0[i];\r
d[i] = dt[i] + y0[i];\r
}else{\r
for (i = 0; i<3;++i)\r
- d[i] = dt[i] + y1[i];\r
+ d[i] = dt[i] + y3[i];\r
}\r
}else{\r
if(yb[ryb]>0){\r
for (i = 0; i<3;++i)\r
- d[i] = dt[i] + y3[i];\r
+ d[i] = dt[i] + y1[i];\r
}else{\r
- //for (i = 0; i<3;++i)\r
- //d[i] += y2[i];\r
- printf("Error! Daten existieren nicht. Zugriff auf vierten punkt");\r
+ for (i = 0; i<3;++i)\r
+ d[i] = dt[i] + y2[i];\r
+ //printf("Error! Daten existieren nicht. Zugriff auf vierten punkt");\r
}\r
}\r
\r
- for (i = 0; i<3;++i)\r
- d[i] = y0[i]-x0[i];\r
+ // for (i = 0; i<3;++i)\r
+ // d[i] = y0[i]-x0[i];\r
\r
printf("(%d,%d)",rx,ry);\r
if (rx == ry) {\r
printf("(%d,%d@%d,%d)",rxa,rxb,rya,ryb);\r
- printf("[%.2f,%.2f@%.2f,%.2f]\n",xa[rxa],xb[rxb],ya[rya],yb[ryb]);\r
+ printf("[%.2f,%.2f@%.2f,%.2f]",xa[rxa],xb[rxb],ya[rya],yb[ryb]);\r
+ printf("%d%d %.1f %.1f %.1f|||",j,k,dt[0],dt[1],dt[2]);\r
+ printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]);\r
if (rxa == rya) {\r
//printf("%d%d %.1f %.1f | %.1f %.1f || %.1f %.1f | %.1f %.1f || %.1f %.1f %.1f\n",j,k,x0[0], x1[0], x0[1], x3[1], y0[0],\r
// y1[0], y0[1], y3[1], d[0], d[1], d[2]);\r
- printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]);\r
+ //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]);\r
tmp = quad0Int(F_par, fabs(xa[rxa]), fabs(xb[rxb]),\r
fabs(ya[rxa]), fabs(yb[rxb]), d[rxa], d[rxb], d[rx]);\r
// printf("%d%d|%.2f\n",j,k,tmp);\r
hold on
end
-%% Dreiecke einzeichnen
+%% Flächen
eles = size(elements,1);
if(e)
for idx = 1:eles
- current = coordinates(elements(idx,[1:3,3,1])',:);
- current(3,:) = current(3,:)-current(1,:)+current(2,:);
+ current = coordinates(elements(idx,[1:4,1])',:);
+% current(3,:) = current(3,:)-current(1,:)+current(2,:);
fill3(current(:,1),current(:,2),current(:,3),'b'); % Zeichnet Oberflaeche
hold on
end
else
for idx = 1:eles
- current = coordinates(elements(idx,[1:3,3,1])',:);
- current(3,:) = current(3,:)-current(1,:)+current(2,:);
+ current = coordinates(elements(idx,[1:4,1])',:);
+% current(3,:) = current(3,:)-current(1,:)+current(2,:);
plot3(current(:,1),current(:,2),current(:,3),'b'); % Zeichnet nur Kanten
hold on
end
anorm = quad_norm(coordinates,elements);
end
for idx = 1:eles
- current = sum(coordinates(elements(idx,[2,3])',:),1)/2;
- current = [current ; current+anorm(idx,:)];
+ current = sum(coordinates(elements(idx,[2,4])',:),1)/2;
+ current = [current ; current+anorm(idx,:);coordinates(elements(idx,1)',:)];
plot3(current(:,1),current(:,2),current(:,3),'r'); % Zeichnet Oberflaeche
scatter3(current(2,1),current(2,2),current(2,3),'xr');
hold on