void stlb_k01(double tt[TETRA_V_NUM][VEC_SIZE], double tp[TRIPRISM_V_NUM][VEC_SIZE]) { set_tetra(tt); prStlTetra(tt, (char*)"Tetra01"); set_triprism(tp, 2.0); prStlTriprism(tp, (char*)"Triprism01"); }
static void get_conventional_lattice(double lattice[3][3], SPGCONST Spacegroup *spacegroup) { int i, j; double metric[3][3]; Pointgroup pointgroup; pointgroup = ptg_get_pointgroup(spacegroup->pointgroup_number); for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { lattice[i][j] = 0; } } mat_get_metric(metric, spacegroup->bravais_lattice); debug_print("bravais lattice\n"); debug_print_matrix_d3(spacegroup->bravais_lattice); debug_print("%s\n", spacegroup->setting); switch (pointgroup.holohedry) { case TRICLI: set_tricli(lattice, metric); break; case MONOCLI: /* b-axis is the unique axis. */ set_monocli(lattice, metric); break; case ORTHO: set_ortho(lattice, metric); break; case TETRA: set_tetra(lattice, metric); break; case TRIGO: if (spacegroup->setting[0] == 'R') { set_rhomb(lattice, metric); } else { set_trigo(lattice, metric); } break; case HEXA: set_trigo(lattice, metric); break; case CUBIC: set_cubic(lattice, metric); break; case HOLOHEDRY_NONE: break; } }
static int get_conventional_lattice(double lattice[3][3], const Holohedry holohedry, SPGCONST double bravais_lattice[3][3]) { int i, j; double metric[3][3]; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { lattice[i][j] = 0; } } mat_get_metric(metric, bravais_lattice); switch (holohedry) { case TRICLI: mat_copy_matrix_d3(lattice, bravais_lattice); break; case MONOCLI: /* b-axis is the unique axis. */ set_monocli(lattice, metric); break; case ORTHO: set_ortho(lattice, metric); break; case TETRA: set_tetra(lattice, metric); break; case RHOMB: set_rhomb(lattice, metric); break; case TRIGO: set_trigo(lattice, metric); break; case HEXA: set_trigo(lattice, metric); break; case CUBIC: set_cubic(lattice, metric); break; case NONE: break; } return 1; }
void TransformPosition(char *label, FILE *fp){ double trMat[VEC_SIZE][VEC_SIZE]; double v0[VEC_SIZE], v1[VEC_SIZE], v2[VEC_SIZE], p[VEC_SIZE]; AXIS axis = randCoordinateAxis(); v0[0] = axis.x_axis.x; v0[1] = axis.x_axis.y; v0[2] = axis.x_axis.z; v0[3] = 0.0; v1[0] = axis.y_axis.x; v1[1] = axis.y_axis.y; v1[2] = axis.y_axis.z; v1[3] = 0.0; v2[0] = axis.z_axis.x; v2[1] = axis.z_axis.y; v2[2] = axis.z_axis.z; v2[3] = 0.0; p[0] = axis.origin.x; p[1] = axis.origin.y; p[2] = axis.origin.z; p[3] = 1.0; setMatCol4h(trMat, v0, v1, v2, p); if(strcmp(label, "Tetra") == 0){ printf("四面体作ります\n"); double tt[TETRA_V_NUM][VEC_SIZE], tranformedtt[TETRA_V_NUM][VEC_SIZE]; set_tetra(tt); for (int i = 0; i < TETRA_V_NUM; ++i){ mulMV4h(tranformedtt[i], trMat, tt[i]); } CombinationTetra(tranformedtt, fp); } else if(strcmp(label, "Triprism") == 0){ printf("三角柱作ります\n"); double tp[TRIPRISM_V_NUM][VEC_SIZE], tranformedtp[TRIPRISM_V_NUM][VEC_SIZE]; set_triprism(tp, 2.0); for (int i = 0; i < TRIPRISM_V_NUM; ++i){ mulMV4h(tranformedtp[i], trMat, tp[i]); } CombinationTriprism(tranformedtp, fp); }else{ printf("ラベルが間違っている\n"); } }