POJ 1408 Fishnet 两线段交点坐标
2013-10-28 11:24
363 查看
设线段v1v2,u1u2。
t = (v2-v1)*(u1-v1)/(v2-v1)*(u2-u1); 即两个平行四边形的面积之比。
交点坐标为p = {u1.x + (u2.x-u1.x)*t , u1.y + (u2.y-u.y)*t};
前提是两线段相交。
t = (v2-v1)*(u1-v1)/(v2-v1)*(u2-u1); 即两个平行四边形的面积之比。
交点坐标为p = {u1.x + (u2.x-u1.x)*t , u1.y + (u2.y-u.y)*t};
前提是两线段相交。
#include <cstdio> #include <cmath> #include <algorithm> using namespace std; struct P { double x,y; }t[35],b[35],l[35],r[35],fishnet[35][35]; double CrossProduct(P a1,P a2,P b1,P b2) { P v1 = {a1.x - a2.x,a1.y - a2.y}; P v2 = {b1.x - b2.x,b1.y - b2.y}; return (v1.x*v2.y - v1.y*v2.x); } P CalLineCrossPosition(P a1,P a2,P b1,P b2) { double t; t = fabs(CrossProduct(a1,b1,a1,a2))/fabs(CrossProduct(a1,a2,b1,b2)); P p = {b1.x + (b2.x-b1.x)*t,b1.y + (b2.y-b1.y)*t}; return p; } int main() { int n,i,j; double MaxArea,TempArea; while(scanf("%d",&n) && n) { for(i = 1;i <= n ; ++i) { b[i].y = 0; scanf("%lf",&b[i].x); } for(i = 1;i <= n ; ++i) { t[i].y = 1; scanf("%lf",&t[i].x); } for(i = 1;i <= n ; ++i) { l[i].x = 0; scanf("%lf",&l[i].y); } for(i = 1;i <= n ; ++i) { r[i].x = 1; scanf("%lf",&r[i].y); } ++n; for(i = 1;i < n; ++i) { for(j = 1;j < n; ++j) { fishnet[i][j] = CalLineCrossPosition(l[i],r[i],t[j],b[j]); } } for(i = 1;i < n; ++i) { fishnet[i] = r[i]; fishnet[i][0] = l[i]; fishnet[0][i] = b[i]; fishnet [i] = t[i]; } MaxArea = -199; fishnet[0][0].x = 0; fishnet[0][0].y = 0; fishnet[0] .x = 1; fishnet[0] .y = 0; fishnet [0].x = 0; fishnet [0].y = 1; fishnet .x = 1; fishnet .y = 1; for(i = 0;i < n; ++i) { for(j = 0;j < n; ++j) { TempArea = (fabs(CrossProduct(fishnet[i][j],fishnet[i+1][j],fishnet[i][j],fishnet[i][j+1]))+fabs(CrossProduct(fishnet[i+1][j+1],fishnet[i+1][j],fishnet[i+1][j+1],fishnet[i][j+1])))/2; if(MaxArea < TempArea) MaxArea = TempArea; } } printf("%.6f\n",MaxArea); } return 0; }
相关文章推荐
- POJ 1408 Fishnet(几何--叉积求面积 + 求直线的交点坐标)
- ZOJ 1683 Fishnet (POJ 1408)(计算线段交点&叉积求面积)
- POJ 1408 Fishnet【枚举+线段相交+叉积求面积】
- POJ 1408 Fishnet【枚举+线段相交+叉积求面积】
- POJ1408 两条线段求交点+叉乘求几何面积+枚举
- poj 1408 Fishnet(计算几何 叉积求面积 求两直线交点 暴力)
- poj 1408 Fishnet(直线方程、交点、三角形面积的应用)
- POJ 1408-Fishnet(计算几何-根据交点求多边形面积)
- poj 1408 Fishnet(计算几何)
- POJ 1039 Pipe(直线和线段相交判断,求交点)
- POJ 1039 Pipe(直线和线段相交判断,求交点)
- POJ-1408 Fishnet 枚举+叉积
- poj 1408 Fishnet
- poj 1269 Intersecting Lines 判断两线段是否相交并求其交点
- poj 1269 Intersecting Lines(判断线段相交,并求交点)
- POJ 1408:Fishnet
- POJ3304 Segments(计算几何,线段和直线的交点)
- POJ 1408 Fishnet
- 两条线段知道端点line1(x1,y1)(x2,y2)line2(x3,y3)(x4,y4),判断两条线段是否相交,交点坐标(x,y)
- poj-1408-计算两线相交点坐标模板