并行计算大作业之多边形相交(OpenMP、MPI、Java、Windows)

这篇博客介绍了作者在《并行计算与程序设计》课程中的大作业,即实现多边形相交问题的并行算法,包括使用OpenMP、MPI、Java(线程与Runnable方式)以及Windows(win32、MFC、.Net)的方法。虽然测试数据创建困难,但作者认为并行计算颇具挑战性和趣味性。
摘要由CSDN通过智能技术生成

***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************



吐槽:

话说,相当郁闷,2015年,第一次打开博客,准备总结一下这一年。。

结果博客被封了= =!

今天,终于解封了,换了密码,换了密保....

但是,写回顾的激情有点退散了。。

明后两天要上课,明天还要验收一个综合设计大作业,再后两天要考试,再后两天继续上课,然后才能放假。。。

回顾,就等着考完试再写吧,正好趁这几天好好总结一下。




正文:

这是这学期开的 《并行计算与程序设计》,学了一些并行计算的东东。

期末没有考试,就是选择一个算法,用 OpenMP、MPI、Java、Windows 实现,当然还有额外的,比如 Hadoop、GPU、Linux等(这些没有花时间去研究。。)


我选择的算法就是很简单的,多边形相交问题,只是用到了并行计算的一些基础。

发一篇博客,把这个大作业记录下来~。~


1. 功能描述与解决方案

1.1 功能描述:

    在很多实际应用中,要求确定一组几何物体(目标)是否相交。例如,在模式分类中,必须确定代表不同类别的空间中的不同区域是否具有共同的子区域;在集成电路设计中,重要的是要避免导线的交叉和元件的重叠;在计算机图形学中,要求消去三维景象的二维表示中的隐线和隐面等等。像如上的这些问题都可归结为物体的相交问题(Intersection Problem)。

    设有平面上的两个多边形(允许有边相交)R和Q,如果多边形R的一条边和Q的一条边相交,则称R和Q是相交的。所以两个多边形的相交问题可以转化为线段与多边形的相交问题。三维空间的相交问题与二维平面上的相交问题并没有实质的区别,只是在判断边的相交时比二维问题上判断边的相交要麻烦,因为三维空间上的点坐标是与3个值有关的。

    下面描述的算法都是针对二维平面上的多边形相交而言的。

1.2 解决方案

    最基本的相交问题是判断两条线段是否相交。而边与多边形相交就是判断一条边和多条边中的某条边是否相交的算法。要是一个多边形的某条边与另一个多边形的一条边相交,则就称两个多边形相交。这样两个多边形相交的问题就转化为多条边与一个多边形相交的问题。


2. 算法设计

2.1 串行算法设计

    输入:多边形R的n条边E1,E2,,…,En的两个端点坐标集合S1,多边形Q的m条边

F1,F2,,…,Fm的两个端点坐标集合S2,要求集合内点的顺序为顺时针方向。

    输出:两个多边形是否相交:true(两多边形相交);false(两多边形不相交)

Begin
    for i=1 to n do
        for j=1 to m do
            if (Ei intersects Fj ) then
                return true
            end if
        end for
    end for
    return false
End


    显然上述算法所需时间为O(mn)。


2.2 并行算法设计

    输入:多边形R的n条边E1,E2,,…,En的两个端点坐标集合S1,多边形Q的m条边

F1,F2,,…,Fm的两个端点坐标集合S2,要求集合内点的顺序为顺时针方向。

    输出:两个多边形是否相交:true(两多边形相交);false(两多边形不相交)

Begin
    for i=1 to n par-do
        for j=1 to m
            if (Ei intersects Fj ) then
                return true
            end if
        end for
    end for
    return false;
End


3.各种并行算法

3.1 OpenMP 方法

#include "stdafx.h"
#include "omp.h"
#include <time.h>
#include <windows.h>

// 设置相交精度与多边形点个数的上限
const double EPS = 1e-10;  
const int MAX &
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值