| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 443 人关注过本帖
标题:[求助]各位看看这个程序
取消只看楼主 加入收藏
xdliu
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-4-16
收藏
 问题点数:0 回复次数:1 
[求助]各位看看这个程序

for (i=1;i<=4;i++)
{
switch(i){
case 1:ClipBoundary[0].x=100;
ClipBoundary[0].y=100;
ClipBoundary[1].x=100;
ClipBoundary[1].y=200;
break;
case 2: ClipBoundary[0].x=100;
ClipBoundary[0].y=100;
ClipBoundary[1].x=300;
ClipBoundary[1].y=100;break;
case 3: ClipBoundary[0].x=300;
ClipBoundary[0].y=100;
ClipBoundary[1].x=300;
ClipBoundary[1].y=200;break;
case 4: ClipBoundary[0].x=300;
ClipBoundary[0].y=200;
ClipBoundary[1].x=100;
ClipBoundary[1].y=200;break;
default: break;
}
for(j =1;j<Inlength;j++)
{ p=InVertexArray[j];
s=InVertexArray[j-1];
if(xiangjiao(s,p, ClipBoundary))
{
B[j]=Intersect(s, p, ClipBoundary);
printf("%5f\n",B[j].x);
printf("%5f\n",B[j].y);
}


}
}

每选择一个ClipBoundary值时可以有两个交点,,也就是B值应该有两个,为什么输出的是四个点,还请各位大侠看看

2006-04-20 14:08
xdliu
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-4-16
收藏
得分:0 

整个程序如下
#include "stdio.h"
#include <math.h>
#include "conio.h"
#include<graphics.h>
typedef struct
{
float x;
float y;
}Vertex;
typedef Vertex Edge[2];
typedef Vertex VertexArray[20];
int Inside(p,ClipBoundary)
Vertex p;
Edge ClipBoundary;
{
if(p.x<ClipBoundary[0].x) return 0;
if(p.x>ClipBoundary[1].x) return 0;
if(p.y<ClipBoundary[0].y) return 0;
if(p.y>ClipBoundary[1].y) return 0;
else
return 1;
}
int xiangjiao(s,p,ClipBoundary)
Vertex s,p;
Edge ClipBoundary;
{
if(ClipBoundary[0].x==ClipBoundary[1].x)
{ if ((s.x<ClipBoundary[0].x)&&(p.x>ClipBoundary[0].x))
return 1;
else if ((p.x<ClipBoundary[0].x)&&(s.x>ClipBoundary[0].x))
return 1;
}
else if (ClipBoundary[0].y==ClipBoundary[1].y)
{if((s.y>ClipBoundary[0].y)&&(p.y<ClipBoundary[0].y))
return 1;
else if ((p.y>ClipBoundary[0].y)&&(s.y<ClipBoundary[0].y))
return 1;
}

return 0;
}
Vertex Intersect(s,p,ClipBoundary)
Vertex s,p;
Edge ClipBoundary;
{
Vertex IntersectPt;
if(ClipBoundary[0].y==ClipBoundary[1].y)

{ IntersectPt.y =ClipBoundary[0].y;

IntersectPt.x =s.x+(ClipBoundary[0].y -s.y)*(p.x - s.x)/(p.y - s.y);

}

if(ClipBoundary[0].x==ClipBoundary[1].x)

{
IntersectPt.x =ClipBoundary[0].x;

IntersectPt.y =s.y+(ClipBoundary[0].x - s.x)*(p.y - s.y)/(p.x - s.x);

}
return IntersectPt;
}

void main()
{
VertexArray InVertexArray,B,C,D,K;
Edge ClipBoundary;
int Inlength,j,i,k,driver,mode;
Vertex s, p,ip,A;
Inlength=5;
driver=DETECT;
mode=0;
initgraph(&driver,&mode,"");
setcolor(15);
InVertexArray[0].x=50;
InVertexArray[0].y=150;
InVertexArray[1].x=200;
InVertexArray[1].y=50;
InVertexArray[2].x=350;
InVertexArray[2].y=150;
InVertexArray[3].x=200;
InVertexArray[3].y=250;
InVertexArray[4].x=50;
InVertexArray[4].y=150;

for (i=1;i<=4;i++)
{
switch(i){
case 1:ClipBoundary[0].x=100;
ClipBoundary[0].y=100;
ClipBoundary[1].x=100;
ClipBoundary[1].y=200;
break;
case 2: ClipBoundary[0].x=100;
ClipBoundary[0].y=100;
ClipBoundary[1].x=300;
ClipBoundary[1].y=100;break;
case 3: ClipBoundary[0].x=300;
ClipBoundary[0].y=100;
ClipBoundary[1].x=300;
ClipBoundary[1].y=200;break;
case 4: ClipBoundary[0].x=300;
ClipBoundary[0].y=200;
ClipBoundary[1].x=100;
ClipBoundary[1].y=200;break;
default: break;
}
for(j =1;j<Inlength;j++)
{ p=InVertexArray[j];
s=InVertexArray[j-1];
if(xiangjiao(s,p, ClipBoundary))
{
B[j]=Intersect(s, p, ClipBoundary);
printf("%5f\n",B[j].x);
printf("%5f\n",B[j].y);
InVertexArray[j]=B[j];
}


}
}

getch();
restorecrtmode();
}


2006-04-20 15:10
快速回复:[求助]各位看看这个程序
数据加载中...
 
   



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

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