Пример #1
0
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;
}
Пример #2
0
/*******************************************************************************
*函数名称: 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( &para ) == 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( &para ) == 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++;
    }
Пример #3
0
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;
}