17 double *mincolor,
double *maxcolor) {
21 for (i = 0; i < (nx + 1) * (ny + 1) * (nz + 1); i++) {
22 if (empty_flag[i] == 1) {
24 if (value < *mincolor) *mincolor = value;
25 if (value > *maxcolor) *maxcolor = value;
31 double *var,
int *empty_flag,
int nx,
int ny,
32 int nz,
int mynode,
int pesize,
35 double delta, value, color[3];
36 int count[500], t_count[500], max_number, max_length, start_x, end_x, start_y,
42 unsigned char r, g, b;
46 int start_xs, start_ys;
50 delta = (tmaxcolor - tmincolor) / 500.0;
51 for (i = 0; i < 500; i++) {
55 for (i = 0; i < (nx + 1) * (ny + 1) * (nz + 1); i++) {
56 if (empty_flag[i] == 1) {
57 j = (int)((var[i] - tmincolor) / delta);
66 for (i = 0; i < 500; i++) t_count[i] = count[i];
69 fp = fopen(
"histogram.bmp",
"wb");
72 graph = (
double *)
HECMW_calloc(400 * 530 * 3,
sizeof(
double));
74 for (i = 0; i < 400 * 530 * 3; i++) graph[i] = 0.0;
76 for (i = 0; i < 500; i++) {
77 if (t_count[i] > max_number) max_number = t_count[i];
81 "ERROR: HEC-MW-VIS-E2003:Cannot generate histogram graph, the number "
83 max_length = (int)(400 - 30 - 5 - 45 * 1.5);
84 start_x = (int)(5 + 45 * 1.5 + 15);
86 for (j = 0; j < 500; j++) {
88 (int)((
double)t_count[j] * (double)max_length / (
double)max_number +
93 for (i = start_x; i < end_x; i++) {
94 graph[((j + 15) * 400 + i) * 3] = color[0];
95 graph[((j + 15) * 400 + i) * 3 + 1] = color[1];
96 graph[((j + 15) * 400 + i) * 3 + 2] = color[2];
102 for (k = 0; k < 11; k++) {
103 value = tmincolor + (tmaxcolor - tmincolor) / 10.0 * k;
104 start_ys = start_y + (int)((
double)500.0 / 10 * k) - (
int)7 / 2;
106 sprintf(buf,
"%3.2E", value);
107 for (m = 0; m < 9; m++) {
109 for (j = 0; j < 7; j++)
110 for (i = 0; i < 7; i++) {
111 graph[((start_ys + j) * 400 + start_xs - i) * 3] =
112 (double)output7[6 - j][i];
113 graph[((start_ys + j) * 400 + start_xs - i) * 3 + 1] =
114 (double)output7[6 - j][i];
115 graph[((start_ys + j) * 400 + start_xs - i) * 3 + 2] =
116 (double)output7[6 - j][i];
119 if ((value >= 0) && (m == 0)) start_xs -= 7;
121 if ((k != 0) && (k != 10)) {
122 start_ys += (int)7 / 2;
124 for (i = start_x; i < start_x + 5; i++)
125 for (j = 0; j < 3; j++) graph[(start_ys * 400 + i) * 3 + j] = 1.0;
128 header.
bfSize = 54 + 3 * 400 * 530;
129 #ifdef CONVERSE_ORDER
133 #ifdef CONVERSE_ORDER
138 #ifdef CONVERSE_ORDER
143 #ifdef CONVERSE_ORDER
148 #ifdef CONVERSE_ORDER
153 #ifdef CONVERSE_ORDER
158 #ifdef CONVERSE_ORDER
163 #ifdef CONVERSE_ORDER
168 #ifdef CONVERSE_ORDER
173 #ifdef CONVERSE_ORDER
178 #ifdef CONVERSE_ORDER
183 #ifdef CONVERSE_ORDER
188 #ifdef CONVERSE_ORDER
193 #ifdef CONVERSE_ORDER
198 #ifdef CONVERSE_ORDER
204 fwrite(&(header.
bfSize),
sizeof(
unsigned int), 1, fp);
205 fwrite(&header.
bfReserved1,
sizeof(
unsigned short int), 1, fp);
206 fwrite(&header.
bfReserved2,
sizeof(
unsigned short int), 1, fp);
207 fwrite(&header.
bfOffBits,
sizeof(
unsigned int), 1, fp);
208 fwrite(&info, 40, 1, fp);
209 for (j = 0; j < 530; j++)
210 for (i = 400 - 1; i >= 0; i--) {
211 ri = (int)(graph[(j * 400 + i) * 3] * 256);
212 gi = (int)(graph[(j * 400 + i) * 3 + 1] * 256);
213 bi = (int)(graph[(j * 400 + i) * 3 + 2] * 256);
215 if (ri > 255) ri = 255;
217 if (gi > 255) gi = 255;
219 if (bi > 255) bi = 255;
235 int *empty_flag,
int nx,
int ny,
int nz,
237 double *interval_point) {
240 int count[500], t_count[500], tmp_count[500], sum_count, interv_count, sum,
242 delta = (tmaxcolor - tmincolor) / 500.0;
243 for (i = 0; i < 500; i++) {
247 for (i = 0; i < (nx + 1) * (ny + 1) * (nz + 1); i++) {
248 if (empty_flag[i] == 1) {
249 j = (int)((var[i] - tmincolor) / delta);
251 if (j > 499) j = 499;
258 for (i = 0; i < 500; i++) t_count[i] = count[i];
261 for (i = 0; i < 500; i++) {
262 sum_count += t_count[i];
263 tmp_count[i] = t_count[i];
265 interv_count = (int)sum_count / 10;
267 interval_point[0] = tmincolor;
268 interval_point[1] = 0.0;
269 for (i = 1; i < 10; i++) {
270 interval_point[i * 2 + 1] = (double)i / 10.0;
273 while ((j < 500) && (sum < interv_count)) {
278 interval_point[i * 2] =
281 (1.0 - (
double)(sum - interv_count) / (
double)tmp_count[j])) *
282 (tmaxcolor - tmincolor) +
284 t_count[j] = sum - interv_count;
287 interval_point[20] = tmaxcolor;
288 interval_point[21] = 1.0;
289 fprintf(stderr,
"The automatic color mapping set is :\n");
290 for (i = 0; i < 11; i++)
291 fprintf(stderr,
"%lf %lf \n", interval_point[i * 2],
292 interval_point[i * 2 + 1]);
297 int *empty_flag,
int nx,
int ny,
int nz,
int mynode,
301 int count[100], t_count[100];
304 delta = (tmaxcolor - tmincolor) / 100.0;
305 for (i = 0; i < 100; i++) {
309 for (i = 0; i < (nx + 1) * (ny + 1) * (nz + 1); i++) {
310 if (empty_flag[i] == 1) {
311 j = (int)((var[i] - tmincolor) / delta);
320 for (i = 0; i < 100; i++) t_count[i] = count[i];
323 fp = fopen(
"histogram.file",
"w");
326 for (i = 0; i < 100; i++)
327 fprintf(fp,
"%d %d -----(%lf --- %lf)\n", i, t_count[i],
328 tmincolor + i * delta, tmincolor + (i + 1) * delta);
337 for (i = 0; i < 6; i++)
344 double dis_minmax[2]) {
347 dis_minmax[0] = dis_minmax[1] =
348 sqrt(
SQR(vertex[0]) +
SQR(vertex[1]) +
SQR(vertex[2]));
349 for (i = 0; i < 8; i++) {
350 dis = sqrt(
SQR(vertex[i * 3] - view_point_d[0]) +
351 SQR(vertex[i * 3 + 1] - view_point_d[1]) +
352 SQR(vertex[i * 3 + 2] - view_point_d[2]));
353 if (dis < dis_minmax[0]) dis_minmax[0] = dis;
354 if (dis > dis_minmax[1]) dis_minmax[1] = dis;
360 double maxcolor,
double feap_minmax[2]) {
362 double t, mint, color;
364 for (i = 0; i <= 255; i++) {
365 color = mincolor + (maxcolor - mincolor) * i / 255.0;
367 for (j = 0; j < num_of_features; j++) {
368 t = fabs(color - fea_point[j]);
369 if (t < mint) mint = t;
371 if (mint > feap_minmax[1]) feap_minmax[1] = mint;
373 feap_minmax[0] = 0.0;
378 double maxcolor,
double feai_minmax[2]) {
380 double t, t1, t2, mint, color;
382 for (i = 0; i <= 255; i++) {
383 color = mincolor + (maxcolor - mincolor) * i / 255.0;
385 for (j = 0; j < num_of_features; j++) {
386 if ((t >= fea_point[j * 2]) && (t <= fea_point[j * 2 + 1]))
389 t1 = fabs(color - fea_point[j * 2]);
390 t2 = fabs(color - fea_point[j * 2 + 1]);
396 if (t < mint) mint = t;
398 if (mint > feai_minmax[1]) feai_minmax[1] = mint;
400 feai_minmax[0] = 0.0;