【计算几何】击中目标 pascal 解题…
2015-02-02 19:25
232 查看
【计算几何】击中目标
Time Limit:1000MS Memory
Limit:65536KTotal Submit:14 Accepted:9
Description
击中目标(inside.pas/c/cpp)【问题描述】现需要一个系统,对射击的准确率进行测试。一个射击者对一个目标发射n颗子弹,已知发射n颗子弹所击中的位置和目标所在位置,判断有多少颗子弹能打到目标内。目标是一个凸多边形区域,并且按顺时针或逆时针逐一给出顶点坐标,每一发子弹击中位置是一个坐标。规定子弹击中目标的边上或顶点也算打到目标内。请你编程实现这个系统。Input
输入文件中包含以下内容,第一行为多边形顶点数n和发射子弹数目m;接下来n行为每个顶点坐标(按顺时针或逆时针顺序);再接下来m行为每颗子弹所击中的位置坐标。Output
输出文件输出占一行,输出子弹击中目标的数目。Sample
Input
Sample
Output
Source
读入分为 顺时针 和
逆时针 两种。
当顺时针时,第三个读入的点在 第一,二个读入点组成的向量
的右边,d=false;
当逆时针时,第三个读入的点在 第一,二个读入点组成的向量
的左边,d=true;
当顺时针时,一点必须在所有边的右边(pan=false)或在边上,这点才在多边形中
当逆时针时,一点必须在所有边的左边(pan=true
)或在边上,这点才在多边形中
type arr=record x,y:longint; end; var d:boolean; n,m,i,tot,x,y:longint; a:array[1..100]of
arr; function
pan(p1,p2,x,y:longint):boolean;var i:longint;begin i:=(a[p2].x-a[p1].x)*(y-a[p1].y)-(a[p2].y-a[p1].y)*(x-a[p1].x); if
i>0 then exit(true); if
i<0 then exit(false); if
i=0 then exit(d);end; function
add(x,y:longint):boolean;var j:longint; b:boolean;begin for
j:=1 to n-1 do
if pan(j,j+1,x,y)<>d then
exit(false); if
pan(n,1,x,y)<>d then
exit(false);
exit(true);end; begin tot:=0; read(n,m); read(a[1].x,a[1].y); read(a[2].x,a[2].y); read(a[3].x,a[3].y); d:=pan(1,2,a[3].x,a[3].y); for i:=4 to n
do
read(a[i].x,a[i].y); for i:=1 to m
do
begin
read(x,y); if
add(x,y) then inc(tot);
end; writeln(tot);end.
Time Limit:1000MS Memory
Limit:65536KTotal Submit:14 Accepted:9
Description
击中目标(inside.pas/c/cpp)【问题描述】现需要一个系统,对射击的准确率进行测试。一个射击者对一个目标发射n颗子弹,已知发射n颗子弹所击中的位置和目标所在位置,判断有多少颗子弹能打到目标内。目标是一个凸多边形区域,并且按顺时针或逆时针逐一给出顶点坐标,每一发子弹击中位置是一个坐标。规定子弹击中目标的边上或顶点也算打到目标内。请你编程实现这个系统。Input
输入文件中包含以下内容,第一行为多边形顶点数n和发射子弹数目m;接下来n行为每个顶点坐标(按顺时针或逆时针顺序);再接下来m行为每颗子弹所击中的位置坐标。Output
输出文件输出占一行,输出子弹击中目标的数目。Sample
Input
Sample
Output
Source
读入分为 顺时针 和
逆时针 两种。
当顺时针时,第三个读入的点在 第一,二个读入点组成的向量
的右边,d=false;
当逆时针时,第三个读入的点在 第一,二个读入点组成的向量
的左边,d=true;
当顺时针时,一点必须在所有边的右边(pan=false)或在边上,这点才在多边形中
当逆时针时,一点必须在所有边的左边(pan=true
)或在边上,这点才在多边形中
type arr=record x,y:longint; end; var d:boolean; n,m,i,tot,x,y:longint; a:array[1..100]of
arr; function
pan(p1,p2,x,y:longint):boolean;var i:longint;begin i:=(a[p2].x-a[p1].x)*(y-a[p1].y)-(a[p2].y-a[p1].y)*(x-a[p1].x); if
i>0 then exit(true); if
i<0 then exit(false); if
i=0 then exit(d);end; function
add(x,y:longint):boolean;var j:longint; b:boolean;begin for
j:=1 to n-1 do
if pan(j,j+1,x,y)<>d then
exit(false); if
pan(n,1,x,y)<>d then
exit(false);
exit(true);end; begin tot:=0; read(n,m); read(a[1].x,a[1].y); read(a[2].x,a[2].y); read(a[3].x,a[3].y); d:=pan(1,2,a[3].x,a[3].y); for i:=4 to n
do
read(a[i].x,a[i].y); for i:=1 to m
do
begin
read(x,y); if
add(x,y) then inc(tot);
end; writeln(tot);end.
相关文章推荐
- 【计算几何】地主 pascal 解题报告
- 【计算几何】多边形面积 pascal 解…
- 顽猴 PASCAL 解题报告
- uva579&nbsp;-&nbsp;ClockHands(计算几何)
- 土地划分【SGOI-12】pascal 解题报…
- NOIP 2007 普及组解题报告--…
- hdu 1466 计算直线的交点数
- 【再水一天,明天开始计算几何&母函数】补遗PJ 2370及其他两水题
- HDU:2046骨牌铺方格 解题报告
- 【解题报告】 Ural 1348 简单的计算几何
- hdu 1756 Cupid's Arrow 计算几何
- hdu 1466 计算直线的交点数 第四专…
- 算法&&计算几何
- timus 1192. Ball in a Dream URAL 解题报告 平生第一个计算几何+高中物理
- 杭电1086(计算几何)解题报告
- POJ 计算几何专项训练(1) 【2318】&【2398】&【3304】&【2653】&【1556】&【1066】
- HDU 1756 Cupid's Arrow 计算几何
- 11.3.3 用函数模拟延迟计算
- HDU:1222wolf and habbit解题报告
- POJ 1228 Grandpa's Estate 【计算几何:凸包,andrew】