叉乘、快速排斥与跨立实验及求取三角形面积

<pre name="code" class="cpp">叉乘
(一)判断方向
(二)判断线段相交
(三)求三角形面积
(一)判断方向

叉乘的性质如下:
  (1). P x Q > 0; 表示P在Q的顺时针方向;
  (2). p x Q < 0; 表示P在Q的逆时针方向;
  (3). P x Q = 0; 表示P和Q是共线的
P(x1,y1),Q(x2,y2), P*Q=x1y2-x2y1 判断结果三种状态

模版为:

struct point
{
   int x,y;
}p[i];
double cross(point a,point b,point c) //向量P=(b.x-a.x,b.y-a.y),Q=(c.x-a.x,c.y-a.y),则P与Q
                                      //叉积为PQ=(b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);
{
     return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);
}
(二)判断线段相交

快速排斥与跨立实验

#define eps 1e-8
#define maxn 100005
struct point
{
    double x,y;
};
struct line
{
    point a,b;
}s[maxn];
double cross(point a,point b,point c)
{
    return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);
}
bool quick(line p,line q)
{
    if( min(p.a.x,p.b.x)<=max(q.a.x,q.b.x)&&
        min(q.a.x,q.b.x)<=max(p.a.x,p.b.x)&&
        min(p.a.y,p.b.y)<=max(q.a.y,q.b.y)&&
        min(q.a.y,q.b.y)<=max(p.a.y,p.b.y)&&
 cross(p.a,q.a,q.b)*cross(p.b,q.a,q.b)<-eps&&
 cross(q.a,p.a,p.b)*cross(q.b,p.a,p.b)<-eps)
        return true;
        return false;
}
(三)求三角形面积

double area(point a, point b, point c)
{
    return fabs(cross( a, b,c)/2);
}
				
时间: 2024-12-22 07:09:55

叉乘、快速排斥与跨立实验及求取三角形面积的相关文章

计算几何_线段交点的快速排斥_跨立实验

附上题的地址 https://vjudge.net/problem/HDU-1086# // 点是否在矩形 // 矩形点是 st 和 ed bool IsPointInRectangle(Point jpt, Point st, Point ed) { if (min(st.x, ed.x) <= jpt.x && max(st.x, ed.x) >= jpt.x && max(st.y, ed.y) <= jpt.y && max(st.

线段相交(快速排斥实验 + 跨立实验)

Description 给定线段P1P2(P1和P2是线段的两端点,且不重合).P3P4(P3和P4是线段的两端点,且不重合),判断P1P2和P3P4是否相交.P1P2和P3P4相交,即指存在一个点P,它既落在P1P2上又落在P3P4上(含线段的端点). Input 输入数据有多组,第一行为测试数据的组数N,下面包括2N行,每组测试数据含2行,第一行为P1P2的坐标值,第二行为P3P4的坐标值,比如下面的数据 表示P1.P2.P3.P4的坐标分别为:P1(0,0),P2(1,1),P3(2,2)

跨交换机实验VLAN

[实验名称]跨交换机实验VLAN [实验目的]掌握如何在交换机上划分基于端口的VLAN.给VLAN内添加端口,理解跨交换机之间VLAN的特点 [需求分析]通过划分Port来实现交换机的端口隔离,然后使在同一个VLAN里的计算机系统能跨交换机进行相互通信,而在不同VLAN里的计算机系统不能进行相互通信 [实验设备]三层交换机一台,两层交换机一台 [实验步骤]1配置两台交换机的主机名 2在三层交换机上划分VLAN添加端口 3在二层交换机上划分VLAN添加端口 4设置交换机之间的链路为Trunk 5查

快速入门各种跨域

前言因为学习跨域需要配置本地服务器,可能会比较麻烦,所以自己根据网上的博客写了大多数跨域的简单demo,可以自己在`本地运行`,而且`不用配置服务器`.自己对于跨域的理解刚开始也仅仅在于网上的博客文章,通过写这些可以本地运行的demo让我对跨域有了更直面的理解,希望这些demo对你们有帮助,有错误的话欢迎指正,欢迎PR. github地址: https://github.com/FatDong1/cross-domain 多种跨域demo CROS跨域 JSONP跨域 postMessage跨域

数据结构实验之求二叉树后序遍历和层次遍历

数据结构实验之求二叉树后序遍历和层次遍历 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历. 输入 输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据.每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的先序遍历序列,第二个字符串表示二叉树的中序遍历序列. 输出 每组第一行输出二叉树的后序遍历序列,第二行输出二叉树的层次遍历序列 示例输入 2

向量叉乘求多变形面积

#include <iostream> #include <algorithm> #include <vector> #include <fstream> #include <cmath> using namespace std; struct Point { double x, y; }; //计算叉乘,平面上的点,所以向量总是沿z轴方向 double cross(const Point &A, const Point &B,

基于 Docker 快速构建 Linux 0.11 实验环境

by Falcon of TinyLab.org 2015/05/02 简介 五分钟内搭建 Linux 0.11 的实验环境介绍了如何快速构建一个 Linux 0.11 实验环境. 本文介绍如何快速构建一个独立于宿主机的 Linux 0.11 实验环境,该实验环境可以用于任何操作系统的宿主开发机,将非常方便各类学生学习 Linux 0.11,本文只介绍 Ubuntu.在 Windows 和 Mac 下可以用 VirtualBox + Boot2Docker 来启动. 下文要求已经安装 git 和

Mysql快速导出导入数据的实验

一.创建测试数据库 CREATE database example; use example; create TABLE `user` ( `id` int(11) NOT NULL, `last_name` varchar(45) DEFAULT NULL, `first_name` varchar(45) DEFAULT NULL, `sex` set('M','F') DEFAULT NULL, `age` tinyint(1) DEFAULT NULL, `phone` varchar(

mui跨页面的传值和取值

最近在做一个基于mui框架的移动app.遇到跨页面传值的问题.在此做以记录 mui.openWindow({ url:'parkDetail.html', id: 'parkDetail', styles:{ top:'newpage-top-position',//新页面顶部位置 bottom:'newage-bottom-position',//新页面底部位置 width:'newpage-width',//新页面宽度,默认为100% height:'newpage-height',//新页