POJ1408-Fishnet

article/2025/9/23 16:34:57

全解题报告索引目录 -> 【北大ACM – POJ试题分类

转载请注明出处:http://exp-blog.com

-------------------------------------------------------------------------

 

大致题意:

一个1X1的正方形,每条边上有n个不同的点(不包括顶点),并给出它们的坐标。现在把对边相对应的点相连,将正方形分割成(n+1)*(n+1)个小四边形。问最大的四边形的面积是多少。

 

解题思路:

计算几何求面积的题,算半条水题吧。。

基本思路:

构造所有的线段,然后枚举每对水平-竖直线段,求交点,然后计算四边形面积,求最大值。

 

应用知识:

叉积(规范相交)

多边形分解

三角形基于计算几何的面积公式(注意正负)

 

我先建立一个数学模型说明问题:

以n=3为例画图 (当然实际上内部的线不一定是正交的,这里只是为了简单说明)

 

 

第一步建立一个大小为 (n+2)*(n+2) 的二维交点矩阵node,每个元素存储一个交点坐标(x,y)

由于四角交点为定点,每条边上的交点又是输入值,那么外围一圈的交点都是已知了

由于对边的点是对应相连的,因此要求的就是内部n*n个交点

显然地,所求的所有交点都是某两条直线规范相交所得,因此就可以直接使用求规范相交的交点的公式,而不需要套用模板了

交点公式 (及推导过程) 请参看  刘汝佳《算法艺术与信息学竞赛》P357 这里不再说明

 

通过两两枚举所有内部直线,就能得到 交点矩阵node[][]

 

那么剩下的问题就是求出所有 简单四边形(不包含其他四边形) 的面积,输出最大的一个。那么问题就是:已知一个不规则四边形四个角的坐标,求它的面积

 

由于四边形是不规则的,直接求解其面积是非常困难的,唯有将其划分为两个三角形,分别求出两个三角形的面积,再相加

 

如图,我求解所有四边形时都是采用如图的划分方法

那么问题进一步转化为“已知不规则三角形三个角的坐标,如何求其面积”

 

不用比较都看得出,计算几何的方法远远优于解析几何,不但省去计算一堆长度的麻烦(避免了精度误差),而且还能利用计算交点时 计算叉积的功能函数cross()

使用计算几何,不但运算量大大减少了,代码也写少了,结果还更精确

 

不过有一点要注意的是,计算几何计算的面积是有方向的,即面积可能为负,所以绝对值必不可少,这点千万注意

 

 

//Memory Time 
//544K   16MS #include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;typedef class Node
{public:double x,y;
}location;double det(double x1,double y1,double x2,double y2)
{return x1*y2-x2*y1;
}double cross(location A,location B,location C,location D)       //计算 AB x CD
{return det(B.x-A.x , B.y-A.y , D.x-C.x , D.y-C.y);
}/*Compute Intersection*/double xx,yy;  //坐标返回值
void intersection(location A,location B,location C,location D)
{double area1=cross(A,B,A,C);double area2=cross(A,B,A,D);xx=(area2*C.x - area1*D.x)/(area2-area1);    //本题所求的交点一定是规范相交所得,因此无需判断是否规范相交yy=(area2*C.y - area1*D.y)/(area2-area1); return;
}/*Compute Area*/double area(location A,location B,location C,location D)
{double triangle1=fabs(0.5*cross(A,B,A,C));    //用计算几何的方法计算的面积是有向面积double triangle2=fabs(0.5*cross(A,B,A,D));    //即算出来的面积可能为负数,因此必须用绝对值// fabs() 为取double的绝对值函数return triangle1+triangle2;
}int main(int i,int j,int k)
{int n;while(cin>>n){if(!n)break;/*Initial*/location** node=new location*[n+2];node[0]=new location[n+2];   //下边node[n+1]=new location[n+2]; //上边/*Input Down-edge*/node[0][0].x = node[0][0].y =0.0;for(i=1;i<=n;i++){cin>>node[0][i].x;node[0][i].y=0.0;}node[0][n+1].x=1.0;node[0][n+1].y=0.0;/*Input Up-edge*/node[n+1][0].x=0.0;node[n+1][0].y=1.0;for(i=1;i<=n;i++){cin>>node[n+1][i].x;node[n+1][i].y=1.0;}node[n+1][n+1].x=1.0;node[n+1][n+1].y=1.0;/*Input Left-edge*/for(i=1;i<=n;i++){node[i]=new location[n+2];cin>>node[i][0].y;node[i][0].x=0.0;}/*Input right-edge*/for(i=1;i<=n;i++){cin>>node[i][n+1].y;node[i][n+1].x=1.0;}/*Compute Intersection*/for(j=1;j<=n;j++)for(i=1;i<=n;i++){intersection(node[0][j],node[n+1][j],node[i][0],node[i][n+1]);node[i][j].x=xx;node[i][j].y=yy;}/*Compute Area*/double max_area=0.0;for(i=1;i<=n+1;i++)for(j=1;j<=n+1;j++){double temp=area(node[i-1][j-1],node[i][j],node[i][j-1],node[i-1][j]);if(max_area < temp)max_area = temp;}/*Output*/cout<<fixed<<setprecision(6)<<max_area<<endl;/*Realx Room*/delete[] node;}return 0;
}


 


http://chatgpt.dhexx.cn/article/NZetkuEd.shtml

相关文章

关于在ArcGIS里创建fishnet时只有几个网格的解决办法

在ArcGIS里创建渔网时可能会出现以下情况&#xff0c;例如只有两个网格 可以看到在创建渔网的窗口中导入的数据中上下左右的单位是经纬度&#xff0c;不是米制单位。 这是由于在创建渔网时没有将坐标系进行转换&#xff0c;利用的shp数据本身的坐标系是度分秒单位的&#xf…

【ArcGIS微课1000例】0002:创建渔网(Create fishnet)

本文讲解ArcGIS软件中渔网(fishnet)工具的原理,方法及使用技巧。 文章目录 微课目标工具介绍实现过程微课目标 如下图所示,影像为无人机航测生产的DOM,现在需要在ArcGIS平台中进行DLG数据采集(数字化),由于测区较大,需要创建500*500的渔网,并对影像进行裁剪下发给多…

ArcGIS 10.2生成渔网(fishnet)

https://blog.csdn.net/lucky51222/article/details/72514885 工具路径&#xff1a;Data Management Tools→Feature Class→Create Fishnet。 &#xff08;1&#xff09;确定输出路径及文件名&#xff1b; &#xff08;2&#xff09;选择渔网范围&#xff0c;本例选择北方地区…

ArcGIS创建渔网Create Fishnet工具生成指定大小格网

本文介绍在ArcMap软件中&#xff0c;通过“Create Fishnet”工具创建渔网&#xff0c;从而获得指定大小的矢量格网数据的方法。 首先&#xff0c;我们在创建渔网前&#xff0c;需要指定渔网覆盖的范围。这里我们就以四川省为例&#xff0c;在这一范围内创建渔网&#xff1b;其中…

ArcGIS中ArcMap创建渔网Create Fishnet:生成指定大小的格网矢量文件

本文介绍在ArcMap软件中&#xff0c;通过“Create Fishnet”工具创建渔网&#xff0c;从而获得指定大小的矢量格网数据的方法。 首先&#xff0c;我们在创建渔网前&#xff0c;需要指定渔网覆盖的范围。这里我们就以四川省为例&#xff0c;在这一范围内创建渔网&#xff1b;其中…

Composited FishNet论文详解

论文名称&#xff1a;Composited FishNet: Fish Detection and Species Recognition From Low-Quality Underwater Videos Abstact (研究问题的重要意义&#xff0c;现在存在的问题&#xff0c;引出研究内容&#xff0c;研究内容的好处&#xff0c;本文创新点&#xff0c;实验…

利用ArcGIS处理土地利用数据:计算fishnet每个格网中不同地类的面积

前期准备&#xff1a;已经创建好的fishnet格网数据以及裁剪好的土地利用类型数据 创建渔网的过程就不讲了&#xff0c;创建渔网过程中可能遇见的问题在其他文章中也有讲到。我利用的土地利用类型数据是global30的数据。 首先将土地利用类型数据的属性表打开&#xff0c;添加一个…

Arcgis操作系列16-使用Arc Map创建渔网(fishnet)

1.目标&#xff1a;以生成一个范围包括黄陵县&#xff0c;格子大小为1000m的渔网为例。 2. 工具&#xff1a;Data Management Tools→Feature Class→Create Fishnet&#xff08;数据管理工具---要素类---创建渔网&#xff09; 3.步骤&#xff1a; &#xff08;1&#xff09;…

【ArcGIS风暴】ArcGIS 10.6创建规则格网(渔网fishnet)图文经典详解

GIS中常常需要地图分幅与编号,或者需要按照规则格网(三角网、矩形网等)去批量裁剪或提取矢量和栅格数据,相关内容可以参看下面的文章。本文主要详细讲解ArcGIS10.6软件中创建渔网的方法,为地图分幅或规则裁剪做好数据准备。 ArcGIS批量裁剪提取或分幅方法总结参考文章: 《…

FishNet网络结构阅读笔记

传统的残差网络&#xff0c;由于多了左边的卷积&#xff0c;导致像素不同&#xff0c;无法直接BP。而Fishnet的可以。 Figure2是FishNet的整体架构&#xff08;鱼型&#xff0c;左边是尾巴右边是头&#xff09;&#xff0c;Tail、Body、Head。主要讲三部分的类型、作用。 Tail是…

ArcGIS基础实验操作100例--实验42创建渔网Fishnet

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验42 创建渔网Fishnet 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&a…

fishnet:论文阅读与代码理解

fishnet&#xff1a;论文阅读与代码理解 一、论文概述二、整体框架三、代码理解四、总结 fishnet论文地址&#xff1a;http://papers.nips.cc/paper/7356-fishnet-a-versatile-backbone-for-image-region-and-pixel-level-prediction.pdf fishnet源码地址&#xff08;pytorch版…

译文:FishNet

FishNet:用于图像、区域和像素级的多功能主干网络 摘要 对于预测不同层级的目标对象&#xff08;如图像级、区域级和像素级&#xff09;&#xff0c;设计卷积神经网络&#xff08;CNN&#xff09;结构的基本原则具有多样性。一般来讲&#xff0c;专门为图像分类任务所设计的网…

范数--2范数/1范数/无穷范数

1、向量范数 2、矩阵范数 3、函数范数

OpenCV-Python教程:统计函数~L1、L2、无穷范数、汉明范数(norm,NORM_HAMMING2,NORM_HAMMING)

原文链接&#xff1a;http://www.juzicode.com/opencv-python-statistics-norm 返回Opencv-Python教程 1、什么是范数 下图是百度百科关于范数的定义&#xff1a; 从定义可以看到L1范数是所有元素的绝对值的和&#xff1b;L2范数是所有元素(绝对值)的平方和再开方&#xff1b…

H无穷范数、最大奇异值、灵敏度函数、扰动响应闭环传递函数、灵敏度积分、上下界

灵敏度函数是系统对扰动的响应,响应能力越弱越好,也就是灵敏度函数越小越好。一般可以通过一些方法使得在感兴趣的频率范围使得扰动响应小,可以用H无穷范数进行表达,通过权重函数的调节可以使得H无穷范数尽量在感兴趣的频率范围内设计的无限小。 Zame把SISO线性反馈系统的…

L2范数、无穷范数

一、向量的范数 首先定义一个向量为&#xff1a;a[-5&#xff0c;6&#xff0c;8, -10] 1.1 向量的1范数 向量的各个元素的绝对值之和&#xff0c;上述向量a的1范数结果就是&#xff1a;29 MATLAB代码实现为&#xff1a;norm&#xff08;a&#xff0c;1&#xff09;&#xf…

Django ORM中原生JSONField的使用方法

带你尝鲜Django最新版重要更新JSONField的使用 Django最新版v3.1的主要更新之一便是完善了对JSON数据存储的支持&#xff0c;新增models.JSONField和forms.JSONField&#xff0c;可在所有受支持的数据库后端上使用 目前支持的数据库以及对应版本主要有MariaDB 10.2.7,MySQL 5.7…

net.sf.json.JSONObject对象使用指南

1 简介 在程序开发过程中&#xff0c;在参数传递&#xff0c;函数返回值等方面&#xff0c;越来越多的使用JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式&#xff0c;同时也易于机器解析和生成、易于理解、阅读和撰写&#xff0c;而且Json采用完全独立于语…