#include
<
stdio.h
>
#include
<
string
.h
>
![None.gif](/Images/OutliningIndicators/None.gif)
struct
line
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
double x1, x2, y;
bool ex;
}
;
![None.gif](/Images/OutliningIndicators/None.gif)
line l1, l;
int
n;
double
len;
![None.gif](/Images/OutliningIndicators/None.gif)
int
lineCnt;
line l2[
30
];
![None.gif](/Images/OutliningIndicators/None.gif)
void
CNT()
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
int i;
for(i = 0; i < lineCnt; i++)
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if(l2[i].ex && len<l2[i].x2-l2[i].x1)
len=l2[i].x2-l2[i].x1;
}
}
![None.gif](/Images/OutliningIndicators/None.gif)
void
cut(line l1,
int
i)
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
if(l1.x1 <= l2[i].x1)
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if(l1.x2<l2[i].x2 && l1.x2>l2[i].x1)
l2[i].x1=l1.x2;
if(l1.x2 >= l2[i].x2)
l2[i].ex=0;
}else
if(l1.x2 >= l2[i].x2)
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if(l1.x1 <= l2[i].x2)
l2[i].x2=l1.x1;
}else
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
l2[lineCnt].x1=l1.x2, l2[lineCnt].x2=l2[i].x2, l2[lineCnt].ex=1;
l2[i].x2=l1.x1;
lineCnt++;
}
}
![None.gif](/Images/OutliningIndicators/None.gif)
void
func()
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
int i;
line shadow;
double r=(l1.y-l.y)/(l1.y-l2[0].y);
shadow.x1=l1.x2-(l1.x2-l.x1)/r;
shadow.x2=l1.x1+(l.x2-l1.x1)/r;
shadow.y=l2[0].y;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
for(i = 0; i < lineCnt; i++)
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if(l2[i].ex)
cut(shadow, i);
}
}
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
int
main()
{
while(scanf("%lf%lf%lf", &l1.x1, &l1.x2, &l1.y)==3)
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if(l1.x1==0 && l1.x2==0 && l1.y==0)
break;
len=0;
scanf("%lf%lf%lf", &l2[0].x1, &l2[0].x2, &l2[0].y);
l2[0].ex=1;
lineCnt=1;
scanf("%d", &n);
int i;
for(i = 0; i < n; i++)
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
scanf("%lf%lf%lf", &l.x1, &l.x2, &l.y);
if(l.y<l1.y && l.y>=l2[0].y)
func();
}
CNT();
if(len>0)
printf("%.2f\n", len);
else
printf("No View\n");
}
return 0;
}
转载于:https://www.cnblogs.com/SQL/archive/2007/10/22/933467.html