| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 338 人关注过本帖
标题:求凸包程序 几个问题
只看楼主 加入收藏
fairsky1314
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2011-8-6
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:2 
求凸包程序 几个问题
#include <stdio.h>
#define true 1
#define false 0
struct point2{
    double x;
    double y;
};
struct edge{
    int s;  /* number of starting point */
    int e;  /* number of end point */
};

double d_distance(struct point2 p, struct point2 q, struct point2 r);
int main(){
    int edges, points=9, i, j, k, valid; /* edges是边的数 points是点的数 */
    struct point2 P[256] = {{0.0,0.0}, {4.0,2.5}, {0.0,2.0}, {5.8,1.2}, {5.6,3.4},
{7.0,1.0}, {3.6,1.4}, {2.0,2.6}, {2.4,0.0}, {1.2,3.8}};
    struct edge E[256];
    edges=0;
    for(i=1;i<=points;j++){   /*(p,q)属于(p*q)  */
        for(j=1;j<=points;j++){
            if(i==j) continue;  /* 仅p!=q时 */
            valid=true;
            for(k=1;k<=points;k++){
                if((k==i) || (k==j) continue;
                if(d_distance(P[i],P[j],P[k])>0.0){
                  /*r代表从p到q的有向直线 如果在左边返正值 如果在右边返负值*/
                    valid=false;
               
            
            if(valid==true){
                edges++;
                E[edges].s=i;
                E[edges].e=j;
            }
        }
    }
    for(i=1;i<=edges;i++){
        printf("Edge[%d]=(%d,%d)/n", i, E[i].s, E[i].e);
    }

    int L[256], points_of_CH, edge_no;
    L[1]=E[1].s;  /* E[1]的起点登录到L[1]*/
    L[2]=E[1].e;  /* E[1]的终点登录到L[2]*/
    rm(E,edges,1); edges--;  /*从E里把E[1]取出*/
    points_of_CH=2;
    while(edges>1){
        edge_no=find(E,edges,L[points_of_OH]);
        points_of_CH++;L[points_of_CH]=E[edge_no].e;
        rm(E,edges,edge_no);edges--;
    }
    for(i=1;i<=points_of_CH;i++){
        printf("L[%d]=%d /n", i, L[i]);
    }
    ruturn 0;
}

问题1
上面的程序中使用的函数 d_distance(), rm(), find()  把它完成

    double d_distance(struct point2 p, struct point2 q, struct points2 r)
       /* r代表从p到q的有向直线 如果在左边返正值 如果在右边返负值 */
{
       ····
}



    int rm(struct edge E[], int edges, int rm_no) /*从E里把指定的边去除*/
{
       ····
    ruturn (0);
}


   int find(struct edge E[], int edges, int pt_no) /*搜索以L的最后的点为起点的边*/
{
       ····
}

问题2
   加上一句代码就能解决 SlowConvexHull的计算量的消减策
   程序的***行后面加上****代码

搜索更多相关主题的帖子: starting include double number points 
2011-08-07 12:19
fairsky1314
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2011-8-6
收藏
得分:0 
没有高手帮帮忙么
2011-08-07 16:34
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:20 
抱歉 计算几何没学太好

                                         
===========深入<----------------->浅出============
2011-08-07 16:38
快速回复:求凸包程序 几个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014726 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved