int point_polygon(pt p, vector<pt>& pol) { int n = pol.size(), count = 0; for(int i = 0; i < n; ++i) { int i1 = g_mod(i+1, n); if (ps_isects(pol[i], pol[i1], p)) return -1; else if(((sgn(pol[i].y - p.y) == 1) != (sgn(pol[i1].y - p.y) == 1)) && ccw(pol[i], p, pol[i1]) == sgn(pol[i].y - pol[i1].y)) ++count; } return count % 2; }
/******************************************************************************* *函数名称: NF_read *函数原型:int32 NF_read( __u32 sector_num, void *buffer, __u32 N ) *函数功能: 读取nand flash中的数据放入内存中。 *入口参数: sector_num flash中起始sector number * buffer 内存中的起始地址 * N 读取的sector个数(以sector为单位) *返 回 值: NF_OK 正确读取 * NF_OVERTIME_ERR 操作超时 * NF_ERROR 读取有误 *备 注: sector_num必须是某个page内的第一个sector. 不能跨块操作。 *******************************************************************************/ __s32 NF_read( __u32 sector_num, void *buffer, __u32 N ) { struct boot_physical_param para; __u8 oob_buf[MAX_PAGE_SIZE/NF_SECTOR_SIZE * OOB_BUF_SIZE_PER_SECTOR]; __u32 page_nr; __u32 scts_per_page = NF_PAGE_SIZE >> NF_SCT_SZ_WIDTH; __u32 residue; __u32 start_page; __u32 start_sct; __u32 i; __u32 blk_num; para.chip = 0; start_sct = g_mod( sector_num, NF_BLOCK_SIZE >> NF_SCT_SZ_WIDTH, &blk_num ); para.block = blk_num; if( g_mod( start_sct, NF_PAGE_SIZE >> NF_SCT_SZ_WIDTH, &start_page ) != 0 ) return NF_ERROR; para.oobbuf = oob_buf; residue = g_mod( N, scts_per_page, &page_nr ); for( i = 0; i < page_nr; i++ ) { para.mainbuf = (__u8 *)buffer + NF_PAGE_SIZE * i; para.page = start_page + i; if( NFB_BASE_PhyRead( ¶ ) == FAIL ) return NF_ERROR; } if( residue != 0 ) { __u8 *page_buf; __u32 j; __u32 word_nr; __u32 *p; __u32 *q; page_buf = get_page_buf( ); para.mainbuf = page_buf; para.page = page_nr; if( NFB_BASE_PhyRead( ¶ ) == FAIL ) return NF_ERROR; for( j = 0, p = (__u32 *)( (__u32)buffer + NF_PAGE_SIZE * page_nr ), word_nr = residue * NF_SECTOR_SIZE >> 2, q = (__u32 *)page_buf; j < word_nr; j++ ) *p++ = *q++; }
double p_signedarea(vector<pt>& pol) { double ret = 0; for(int i = 0; i < pol.size(); ++i) ret += pol[i] % pol[g_mod(i+1, pol.size())]; return ret/2; }