From 6c8cbfa5573140dc8b481c049bd917286875b7b3 Mon Sep 17 00:00:00 2001 From: Dsplib Date: Wed, 20 Dec 2023 23:07:39 +0300 Subject: [PATCH] =?UTF-8?q?=20=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F,=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=B1=D1=83=D0=B4=D1=83=D1=82=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=B2=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B8?= =?UTF-8?q?=D1=82:=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:?= =?UTF-8?q?=20=20=20=20=20=20dspl/lapack/la=5Fxisnan.mod=20=09=D0=B8=D0=B7?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20examples?= =?UTF-8?q?/src/contour=5Ftest.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dspl/lapack/la_xisnan.mod | Bin 339 -> 341 bytes examples/src/contour_test.c | 732 +++++++++++++++++++----------------- 2 files changed, 393 insertions(+), 339 deletions(-) diff --git a/dspl/lapack/la_xisnan.mod b/dspl/lapack/la_xisnan.mod index ebd5314ba3368aeb5a0512c798b0e5cbaad185e0..2685f96415b7f491610a0a171c231a6c0402f32d 100644 GIT binary patch literal 341 zcmV-b0jmBViwFP!000001I?3NZ-OushVT0;&Rxre3j!*;WKazmwx*$5yfS8BVxo}1 zw)pecmJiXnWyyB2^dmX+h4Y-ZhsB(WR0Ir;W%hQ+;XSYFeOUk=PcXbx`Svx>U{{q# zIBYkkeO+veyWPEw2(f@z$n3wL>N^%vn_2{`L?#ag+~>sLfZJ=j&U9Bzt81nT=wWQkKG!M>3%!eGU-~6V#rAt;SrkFpW8bK!{+y;WDLS6VVlA5oO`J z0Z#ZL4ub?d^NI~^tjjRZ$i(QJbB#)6q3I>&XXJ+LnzsuzaL+nmZgLEZ(4&hrla4!% z-gATG0;Hl{;!lyvQ!Nd2S!41z)B$vw;MNq}zw;U$;%Cm;S nA27`RlEM2qgKq!6`EAu{!`riAdcIa${W$0YSZ8QH=K}x$4UVWo literal 339 zcmV-Z0j&NXiwFP!000003eA(tZi6roMfd)S*%=n82#*DQD!h6}Y`?>-=cQCv(W&Tzkz+ua*T({%X#Mz=#c5BbZ#&wE ztwZ07z*bib=(V8I)i=#iKJ)xQ;nLCKGv-(1j_i_mkP>)goiKMfrjL+o(2_~&fn)52 zLb3q2|E`2fiRmhzbx}eG@JZo`Z41IDkB8pF_cennHA6uf$2|%sg2U}Ol(<#1j=`NU lEdP?h{yBpj|8e*YF=^B88L&9F)et`p`T*v9S7+w~006}1pg;fs diff --git a/examples/src/contour_test.c b/examples/src/contour_test.c index 25515b0..70da6f5 100644 --- a/examples/src/contour_test.c +++ b/examples/src/contour_test.c @@ -1,339 +1,393 @@ -#include -#include -#include -#include "dspl.h" - -#define N 3 -#define M 4 -#define BSIZE 256 - -typedef double point2d_t[2]; - -typedef struct -{ - point2d_t p[2]; - int flag; -} linseg_t; - - -int add_linseg(linseg_t** ls, int* lsnum, int* lscnt, - point2d_t* p0, point2d_t* p1) - -{ - int n, c; - n = *lsnum; - c = *lscnt; - // проверяем выделение памяти. - if((n == 0) && ((*ls)==NULL)) - { - n = BSIZE; - (*ls) = (linseg_t*)malloc(n * sizeof(linseg_t)); - } - else - { - // при необходимости увеличиваем - if(c >= n) - { - n += BSIZE; - (*ls) = (linseg_t*)realloc((*ls), n * sizeof(linseg_t)); - } - } - (*ls)[c].p[0][0] = p0[0][0]; - (*ls)[c].p[0][1] = p0[0][1]; - (*ls)[c].p[1][0] = p1[0][0]; - (*ls)[c].p[1][1] = p1[0][1]; - (*ls)[c].flag = 1; - c++; - (*lsnum) = n; - (*lscnt) = c; - - return RES_OK; -} - -int linseg_create(double* z, double* x, double* y, - int n, int m, double lev, - linseg_t** ls, int* sz) -{ - int lsnum, lscnt, t, in, im, i; - point2d_t p0 = {0}; - point2d_t p1 = {0}; - - double dx; - double dy; - - if((ls== NULL)||(z==NULL)) - return ERROR_PTR; - lsnum = 0; - lscnt = 0; - - for(in = 0; in < n-1; in++) - { - for(im = 0; im < m-1; im++) - { - i = in + im * n; - t = 0; - t += z[i] > lev ? 8 : 0; - t += z[i+n] > lev ? 4 : 0; - t += z[i+n+1] > lev ? 2 : 0; - t += z[i+1] > lev ? 1 : 0; - - printf("%d, %d, %d\n", in, im, t); - switch(t) - { - case 0: - case 15: - break; - case 1: - case 14: - // z[i,j] * (1-dx) + z[i+1, j] * dx = lev - // z[i,j] + dx *(z[i+1, j] - z[i,j]) = lev - dx = (lev - z[i]) / (z[i+1] - z[i]); - p0[0] = x[in] + dx; - p0[1] = y[im]; - - dy = (lev - z[i+1]) / (z[i+n+1] - z[i+1]); - p1[0] = x[in+1]; - p1[1] = y[im] + dy; - add_linseg(ls, &lsnum, &lscnt, &p0, &p1); - break; - case 2: - case 13: - dx = (lev - z[i+n]) / (z[i+n+1] - z[i+n]); - p0[0] = x[in] + dx; - p0[1] = y[im + 1]; - - dy = (lev - z[i+1]) / (z[i+n+1] - z[i+1]); - p1[0] = x[in + 1]; - p1[1] = y[im] + dy; - add_linseg(ls, &lsnum, &lscnt, &p0, &p1); - break; - case 3: - case 12: - dx = (lev - z[i]) / (z[i+1] - z[i]); - p0[0] = x[in] + dx; - p0[1] = y[im]; - - dx = (lev - z[i+n]) / (z[i+n+1] - z[i+n]); - p1[0] = x[in] + dx; - p1[1] = y[im+1]; - add_linseg(ls, &lsnum, &lscnt, &p0, &p1); - break; - case 4: - case 11: - dy = (lev - z[i]) / (z[i+n] - z[i]); - p0[0] = x[in]; - p0[1] = y[im] + dy; - - dx = (lev - z[i+n]) / (z[i+n+1] - z[i+n]); - p1[0] = x[in] + dx; - p1[1] = y[im + 1]; - add_linseg(ls, &lsnum, &lscnt, &p0, &p1); - break; - case 5: - dy = (lev - z[i]) / (z[i+n] - z[i]); - p0[0] = x[in]; - p0[1] = y[im] + dy; - dx = (lev - z[i]) / (z[i+1] - z[i]); - p1[0] = x[in] + dx; - p1[1] = y[im]; - add_linseg(ls, &lsnum, &lscnt, &p0, &p1); - - dx = (lev - z[i+n]) / (z[i+n+1] - z[i+n]); - p0[0] = x[in]+dx; - p0[1] = y[im+1]; - dy = (lev - z[i+1]) / (z[i+n+1] - z[i+1]); - p1[0] = x[in+1]; - p1[1] = y[im] + dy; - add_linseg(ls, &lsnum, &lscnt, &p0, &p1); - break; - case 6: - case 9: - dy = (lev - z[i]) / (z[i+n] - z[i]); - p0[0] = x[in]; - p0[1] = y[im] + dy; - dy = (lev - z[i+1]) / (z[i+n+1] - z[i+1]); - p1[0] = x[in+1]; - p1[1] = y[im]; - add_linseg(ls, &lsnum, &lscnt, &p0, &p1); - break; - - case 7: - case 8: - dy = (lev - z[i]) / (z[i+n] - z[i]); - p0[0] = x[in]; - p0[1] = y[im] + dy; - dx = (lev - z[i]) / (z[i+1] - z[i]); - p1[0] = x[in] + dx; - p1[1] = y[im]; - add_linseg(ls, &lsnum, &lscnt, &p0, &p1); - break; - case 10: - dy = (lev - z[i]) / (z[i+n] - z[i]); - p0[0] = x[in]; - p0[1] = y[im] + dy; - dx = (lev - z[i+n]) / (z[i+n+1] - z[i+1]); - p1[0] = x[in] + dx; - p1[1] = y[im+1]; - add_linseg(ls, &lsnum, &lscnt, &p0, &p1); - - dx = (lev - z[i]) / (z[i+1] - z[i]); - p0[0] = x[in]+dx; - p0[1] = y[im]; - dy = (lev - z[i+1]) / (z[i+n+1] - z[i+1]); - p1[0] = x[in+1]; - p1[1] = y[im] + dy; - add_linseg(ls, &lsnum, &lscnt, &p0, &p1); - break; - default: - break; - } - } - } - *ls = (linseg_t*)realloc(*ls, lscnt * sizeof(linseg_t)); - *sz = lscnt; - return RES_OK; -} - - -double dist(point2d_t* p0, point2d_t* p1) -{ - double dx, dy; - dx = p0[0][0] - p1[0][0]; - dy = p0[0][1] - p1[0][1]; - return sqrt(dx*dx + dy*dy); -} - - - -int line_create(linseg_t* ls, int nls, point2d_t** line, int* np) -{ - int i, j, c, n; - if(!line || !ls || !np) - return ERROR_PTR; - // printf("*line = %x, *np = %d \n", *line, *np); - i = 0; - while(!(ls[i].flag) && i < nls) - i++; - if(i==nls) - { - *np = 0; - return RES_OK; - } - //printf("i = %d, ls[%d] = [%.1f %.1f] -- [%.1f, %.1f]\n", - // i, i, ls[i].p[0][0], ls[i].p[0][1], - // ls[i].p[1][0], ls[i].p[1][1]); - n = BSIZE; - if((*line) == NULL) - (*line) = (point2d_t*)malloc(n*sizeof(point2d_t)); - else - (*line) = (point2d_t*)realloc((*line), n*sizeof(point2d_t)); - - c = 0; - (*line)[c][0] = ls[i].p[0][0]; - (*line)[c][1] = ls[i].p[0][1]; - c++; - (*line)[c][0] = ls[i].p[1][0]; - (*line)[c][1] = ls[i].p[1][1]; - c++; - ls[i].flag = 0; - - for(i = 0; i < nls; i++) - { - for(j = 0; j < nls; j++) - { - if(ls[j].flag) - { - //сравниваем с первой точкой отрезка ls[j] - if(dist((*line)+c-1, ls[j].p) < 1E-8) - { - // printf("c0 = %d, j0 = %d\n", c, j); - - // проверяем выделение памяти. - // при необходимости увеличиваем - if(c>=n) - { - n += BSIZE; - (*line) = (point2d_t*)realloc(*line, n*sizeof(point2d_t)); - } - //если первая точка совпадает, то добавляем - //в линию вторую точку - (*line)[c][0] = ls[j].p[1][0]; - (*line)[c][1] = ls[j].p[1][1]; - ls[j].flag = 0; - c++; - } - } - if(ls[j].flag) - { - //сравниваем со второй точкой отрезка ls[j] - if(dist((*line)+c-1, ls[j].p+1) < 1E-8) - { - // printf("c1 = %d, j1 = %d\n", c, j); - - // проверяем выделение памяти. - // при необходимости увеличиваем - if(c>=n) - { - n += BSIZE; - (*line) = (point2d_t*)realloc(*line, n*sizeof(point2d_t)); - } - //если вторая точка совпадает, то добавляем - //в линию первую точку - (*line)[c][0] = ls[j].p[0][0]; - (*line)[c][1] = ls[j].p[0][1]; - ls[j].flag = 0; - c++; - } - } - } - } - (*line) = (point2d_t*)realloc((*line), c*sizeof(point2d_t)); - *np = c; - - return RES_OK; -} - - - - - -int main(int argc, char* argv[]) -{ - /* Matrix - z = [ 0 0 1 0; - 0 1 1 0; - 0 0 0 0]; - in array a by columns - */ - double z[N*M] = { 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0}; - double x[N] = {0.0, 1.0, 2.0}; - double y[M] = {0.0, 1.0, 2.0, 3.0}; - linseg_t *ls = NULL; - int nls, i, j; - point2d_t** line = NULL; - int *np = NULL; - - line = (point2d_t**)malloc(10*sizeof(point2d_t*)); - memset(line,0,10*sizeof(point2d_t*)); - - np = (int*)malloc(10*sizeof(int)); - memset(np, 0, 10*sizeof(int)); - - linseg_create(z, x, y, N, M, 0.5, &ls, &nls); - for(i =0; i< nls; i++) - printf("%d, [%.1f %.1f] -- [%.1f %.1f]\n", i, ls[i].p[0][0], ls[i].p[0][1], ls[i].p[1][0], ls[i].p[1][1]); - - - i = -1; - do - { - i++; - line_create(ls, nls, line+i, np); - for(j =0; j< np[i]; j++) - printf("%[%.1f %.1f] -- ", line[i][j][0], line[i][j][1]); - printf("\n"); - }while(np[i]); - - - return 0; -} +#include +#include +#include +#include "dspl.h" + +#define N 3 +#define M 4 +#define BSIZE 256 + +typedef double point2d_t[2]; + +typedef struct +{ + point2d_t p[2]; + int flag; +} linseg_t; + + +int add_linseg(linseg_t** ls, int* lsnum, int* lscnt, + point2d_t* p0, point2d_t* p1) + +{ + int n, c; + n = *lsnum; + c = *lscnt; + // проверяем выделение памяти. + if((n == 0) && ((*ls)==NULL)) + { + n = BSIZE; + (*ls) = (linseg_t*)malloc(n * sizeof(linseg_t)); + } + else + { + // при необходимости увеличиваем + if(c >= n) + { + n += BSIZE; + (*ls) = (linseg_t*)realloc((*ls), n * sizeof(linseg_t)); + } + } + (*ls)[c].p[0][0] = p0[0][0]; + (*ls)[c].p[0][1] = p0[0][1]; + (*ls)[c].p[1][0] = p1[0][0]; + (*ls)[c].p[1][1] = p1[0][1]; + (*ls)[c].flag = 1; + c++; + (*lsnum) = n; + (*lscnt) = c; + + return RES_OK; +} + +int linseg_create(double* z, double* x, double* y, + int n, int m, double lev, + linseg_t** ls, int* sz) +{ + int lsnum, lscnt, t, in, im, i; + point2d_t p0 = {0}; + point2d_t p1 = {0}; + + double dx; + double dy; + + if((ls== NULL)||(z==NULL)) + return ERROR_PTR; + lsnum = 0; + lscnt = 0; + + for(in = 0; in < n-1; in++) + { + for(im = 0; im < m-1; im++) + { + i = in + im * n; + t = 0; + t += z[i] > lev ? 8 : 0; + t += z[i+n] > lev ? 4 : 0; + t += z[i+n+1] > lev ? 2 : 0; + t += z[i+1] > lev ? 1 : 0; + + printf("%d, %d, %d\n", in, im, t); + switch(t) + { + case 0: + case 15: + break; + case 1: + case 14: + // z[i,j] * (1-dx) + z[i+1, j] * dx = lev + // z[i,j] + dx *(z[i+1, j] - z[i,j]) = lev + dx = (lev - z[i]) / (z[i+1] - z[i]); + p0[0] = x[in] + dx; + p0[1] = y[im]; + + dy = (lev - z[i+1]) / (z[i+n+1] - z[i+1]); + p1[0] = x[in+1]; + p1[1] = y[im] + dy; + add_linseg(ls, &lsnum, &lscnt, &p0, &p1); + break; + case 2: + case 13: + dx = (lev - z[i+n]) / (z[i+n+1] - z[i+n]); + p0[0] = x[in] + dx; + p0[1] = y[im + 1]; + + dy = (lev - z[i+1]) / (z[i+n+1] - z[i+1]); + p1[0] = x[in + 1]; + p1[1] = y[im] + dy; + add_linseg(ls, &lsnum, &lscnt, &p0, &p1); + break; + case 3: + case 12: + dx = (lev - z[i]) / (z[i+1] - z[i]); + p0[0] = x[in] + dx; + p0[1] = y[im]; + + dx = (lev - z[i+n]) / (z[i+n+1] - z[i+n]); + p1[0] = x[in] + dx; + p1[1] = y[im+1]; + add_linseg(ls, &lsnum, &lscnt, &p0, &p1); + break; + case 4: + case 11: + dy = (lev - z[i]) / (z[i+n] - z[i]); + p0[0] = x[in]; + p0[1] = y[im] + dy; + + dx = (lev - z[i+n]) / (z[i+n+1] - z[i+n]); + p1[0] = x[in] + dx; + p1[1] = y[im + 1]; + add_linseg(ls, &lsnum, &lscnt, &p0, &p1); + break; + case 5: + dy = (lev - z[i]) / (z[i+n] - z[i]); + p0[0] = x[in]; + p0[1] = y[im] + dy; + dx = (lev - z[i]) / (z[i+1] - z[i]); + p1[0] = x[in] + dx; + p1[1] = y[im]; + add_linseg(ls, &lsnum, &lscnt, &p0, &p1); + + dx = (lev - z[i+n]) / (z[i+n+1] - z[i+n]); + p0[0] = x[in]+dx; + p0[1] = y[im+1]; + dy = (lev - z[i+1]) / (z[i+n+1] - z[i+1]); + p1[0] = x[in+1]; + p1[1] = y[im] + dy; + add_linseg(ls, &lsnum, &lscnt, &p0, &p1); + break; + case 6: + case 9: + dy = (lev - z[i]) / (z[i+n] - z[i]); + p0[0] = x[in]; + p0[1] = y[im] + dy; + dy = (lev - z[i+1]) / (z[i+n+1] - z[i+1]); + p1[0] = x[in+1]; + p1[1] = y[im]+dy; + add_linseg(ls, &lsnum, &lscnt, &p0, &p1); + break; + + case 7: + case 8: + dy = (lev - z[i]) / (z[i+n] - z[i]); + p0[0] = x[in]; + p0[1] = y[im] + dy; + dx = (lev - z[i]) / (z[i+1] - z[i]); + p1[0] = x[in] + dx; + p1[1] = y[im]; + add_linseg(ls, &lsnum, &lscnt, &p0, &p1); + break; + case 10: + dy = (lev - z[i]) / (z[i+n] - z[i]); + p0[0] = x[in]; + p0[1] = y[im] + dy; + dx = (lev - z[i+n]) / (z[i+n+1] - z[i+1]); + p1[0] = x[in] + dx; + p1[1] = y[im+1]; + add_linseg(ls, &lsnum, &lscnt, &p0, &p1); + + dx = (lev - z[i]) / (z[i+1] - z[i]); + p0[0] = x[in]+dx; + p0[1] = y[im]; + dy = (lev - z[i+1]) / (z[i+n+1] - z[i+1]); + p1[0] = x[in+1]; + p1[1] = y[im] + dy; + add_linseg(ls, &lsnum, &lscnt, &p0, &p1); + break; + default: + break; + } + } + } + *ls = (linseg_t*)realloc(*ls, lscnt * sizeof(linseg_t)); + *sz = lscnt; + return RES_OK; +} + + +double dist(point2d_t* p0, point2d_t* p1) +{ + double dx, dy; + dx = p0[0][0] - p1[0][0]; + dy = p0[0][1] - p1[0][1]; + return sqrt(dx*dx + dy*dy); +} + + + +int line_create(linseg_t* ls, int nls, point2d_t** line, int* np) +{ + int i, j, c, n, k; + if(!line || !ls || !np) + return ERROR_PTR; + // printf("*line = %x, *np = %d \n", *line, *np); + i = 0; + while(!(ls[i].flag) && i < nls) + i++; + if(i==nls) + { + *np = 0; + return RES_OK; + } + //printf("i = %d, ls[%d] = [%.1f %.1f] -- [%.1f, %.1f]\n", + // i, i, ls[i].p[0][0], ls[i].p[0][1], + // ls[i].p[1][0], ls[i].p[1][1]); + n = BSIZE; + if((*line) == NULL) + (*line) = (point2d_t*)malloc(n*sizeof(point2d_t)); + else + (*line) = (point2d_t*)realloc((*line), n*sizeof(point2d_t)); + + c = 0; + (*line)[c][0] = ls[i].p[0][0]; + (*line)[c][1] = ls[i].p[0][1]; + c++; + (*line)[c][0] = ls[i].p[1][0]; + (*line)[c][1] = ls[i].p[1][1]; + c++; + ls[i].flag = 0; + + for(i = 0; i < nls; i++) + { + for(j = 0; j < nls; j++) + { + if(ls[j].flag) + { + //сравниваем последнюю точку линии с первой точкой отрезка ls[j] + if(dist((*line)+c-1, ls[j].p) < 1E-8) + { + + // проверяем выделение памяти. + // при необходимости увеличиваем + if(c>=n) + { + n += BSIZE; + (*line) = (point2d_t*)realloc(*line, n*sizeof(point2d_t)); + } + //если первая точка отрезка совпадает, то добавляем + //в линию вторую точку СЗАДИ + (*line)[c][0] = ls[j].p[1][0]; + (*line)[c][1] = ls[j].p[1][1]; + ls[j].flag = 0; + c++; + } + } + if(ls[j].flag) + { + // сравниваем последнюю точку линии + // со второй точкой отрезка ls[j] + if(dist((*line)+c-1, ls[j].p+1) < 1E-8) + { + // проверяем выделение памяти. + // при необходимости увеличиваем + if(c>=n) + { + n += BSIZE; + (*line) = (point2d_t*)realloc(*line, n*sizeof(point2d_t)); + } + //если вторая точка совпадает, то добавляем + //в линию первую точку СЗАДИ + (*line)[c][0] = ls[j].p[0][0]; + (*line)[c][1] = ls[j].p[0][1]; + ls[j].flag = 0; + c++; + } + } + + if(ls[j].flag) + { + //сравниваем последнюю точку линии с первой точкой отрезка ls[j] + if(dist((*line), ls[j].p) < 1E-8) + { + + // проверяем выделение памяти. + // при необходимости увеличиваем + if(c>=n) + { + n += BSIZE; + (*line) = (point2d_t*)realloc(*line, n*sizeof(point2d_t)); + } + //если первая точка отрезка совпадает, то добавляем + //в линию вторую точку СПЕРЕДИ + for(k = c; k>0; k--) + { + (*line)[k][0] = (*line)[k-1][0]; + (*line)[k][1] = (*line)[k-1][1]; + } + (*line)[0][0] = ls[j].p[1][0]; + (*line)[0][1] = ls[j].p[1][1]; + ls[j].flag = 0; + c++; + } + } + if(ls[j].flag) + { + // сравниваем последнюю точку линии + // со второй точкой отрезка ls[j] + if(dist((*line), ls[j].p+1) < 1E-8) + { + // проверяем выделение памяти. + // при необходимости увеличиваем + if(c>=n) + { + n += BSIZE; + (*line) = (point2d_t*)realloc(*line, n*sizeof(point2d_t)); + } + //если вторая точка совпадает, то добавляем + //в линию первую точку СПЕРЕДИ + + for(k = c; k>0; k--) + { + (*line)[k][0] = (*line)[k-1][0]; + (*line)[k][1] = (*line)[k-1][1]; + } + + (*line)[0][0] = ls[j].p[0][0]; + (*line)[0][1] = ls[j].p[0][1]; + ls[j].flag = 0; + c++; + } + } + + } + } + (*line) = (point2d_t*)realloc((*line), c*sizeof(point2d_t)); + *np = c; + + return RES_OK; +} + + + + + +int main(int argc, char* argv[]) +{ + /* Matrix + z = [ 0 0 1 1; + 0 1 0 0; + 0 1 0 0]; + in array a by columns + */ + double z[N*M] = { 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1}; + double x[N] = {0.0, 1.0, 2.0}; + double y[M] = {0.0, 1.0, 2.0, 3.0}; + linseg_t *ls = NULL; + int nls, i, j; + point2d_t** line = NULL; + int *np = NULL; + + line = (point2d_t**)malloc(10*sizeof(point2d_t*)); + memset(line,0,10*sizeof(point2d_t*)); + + np = (int*)malloc(10*sizeof(int)); + memset(np, 0, 10*sizeof(int)); + + linseg_create(z, x, y, N, M, 0.5, &ls, &nls); + for(i =0; i< nls; i++) + printf("%d, [%.1f %.1f] -- [%.1f %.1f]\n", i, ls[i].p[0][0], ls[i].p[0][1], ls[i].p[1][0], ls[i].p[1][1]); + + + i = -1; + do + { + i++; + line_create(ls, nls, line+i, np+i); + for(j =0; j< np[i]; j++) + printf("[%.1f %.1f] -- ", line[i][j][0], line[i][j][1]); + printf("\n"); + }while(np[i]); + + + return 0; +}