判断点在线段上

2016-11-0921:00:46

判断点p0是否在线段p1p2上
1.先判断p0,p1,p2三点共线
2.在判断点p0在以p1p2为对角线的矩形内。

#include <iostream>
#include <algorithm>
using namespace std;

const double inf = 1e-10;
struct point {
    double x, y;
};

struct v {
    point start, end;
};

bool onSegment(point p1, point p2, point p0) {
    if (fabs((p1.x - p2.x)*(p1.y - p0.y) - (p1.x - p0.x)*(p1.y - p2.y))<1e-10 &&
        min(p1.x, p2.y) <= p0.x&&max(p1.x, p1.x) >= p0.x&&
        min(p1.y, p2.y) <= p0.y&&max(p1.y, p2.y) >= p0.y
        )
        return true;
    return false;
}

int main() {
    point p1, p2, p3;
    while (cin >> p1.x >> p1.y >> p2.x >> p2.y >> p3.x >> p3.y) {
        cout << onSegment(p1, p2, p3) << endl;
    }
}
时间: 2024-12-14 13:49:56

判断点在线段上的相关文章

POJ 1584 A Round Peg in a Ground Hole 判断凸多边形 点到线段距离 点在多边形内

首先判断是不是凸多边形 然后判断圆是否在凸多边形内 kuangbin的板子,但是有些地方不明白. 判断多边形不是凸多边形后,为什么用判断点是否在凸多边形内的模板交WA了,而用判断点是否在任意多边形内的模板A了 而且判断点是否在任意多边形的注释,返回值为什么又说是凸多边形~~~ POJ 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内) #include <iostream> #include <cstdio> #inclu

POJ 3304 Segments 判断直线和线段相交

POJ 3304  Segments 题意:给定n(n<=100)条线段,问你是否存在这样的一条直线,使得所有线段投影下去后,至少都有一个交点. 思路:对于投影在所求直线上面的相交阴影,我们可以在那里作一条线,那么这条线就和所有线段都至少有一个交点,所以如果有一条直线和所有线段都有交点的话,那么就一定有解. 怎么确定有没直线和所有线段都相交?怎么枚举这样的直线?思路就是固定两个点,这两个点在所有线段上任意取就可以,然后以这两个点作为直线,去判断其他线段即可.为什么呢?因为如果有直线和所有线段都相

判断两个线段是否相交

我们的问题是这样的:给定一条线段的起点为$A_1$.终点为$A_2$,另一条线段的起点为$B_1$.终点为$B_2$,问线段$A_1A_2$和线段$B_1B_2$是否相交? 我们首先解释一下,两条线段相交的概念是指,存在一个点,这个点同时在两条线段上. 方法一(解方程法): 容易知道,线段$A_1A_2$上的点的集合为$A = A_1 * (1 - r_1) + A_2 * r_1$,其中$r_1 \in [0, 1]$:同理,线段$B_1B_2$上的点的集合为$B = B_1 * (1 - r

URAL 1966 Cycling Roads 点在线段上、线段是否相交、并查集

F - Cycling Roads Description When Vova was in Shenzhen, he rented a bike and spent most of the time cycling around the city. Vova was approaching one of the city parks when he noticed the park plan hanging opposite the central entrance. The plan had

POJ1696 Space Ant(贪心、向量叉乘、向量极角、线段相交、点在线段上)

题目链接: http://poj.org/problem?id=1696 题目描述: Space Ant Description The most exciting space discovery occurred at the end of the 20th century. In 1999, scientists traced down an ant-like creature in the planet Y1999 and called it M11. It has only one ey

几何画板制作点在线段上的动画方法

几何画板可以使一个点沿某条轨迹运动,使静态变动态,绘制出美观.生动的动态图形,实现动画效果.下面我们通过举例点在线段上的动画作讲解来学习几何画板点动画的制作方法. 具体的操作步骤如下: 打开几何画板,在工作区域画线段AB,在线段AB上任意画一点C. 选中点C,单击“编辑”——“操作类按钮”——“动画”,弹出对话框,单击确定后在工作区中出现了一个“动画点”按钮,可通过该按钮来控制点C在线段AB上的运动.如下图所示,右键单击“动画点”按钮,选择“属性”,可以重新设置点C的运动方向.速度及按钮标签.

圆在线段上滚动如何用几何画板实现

如果实现让一个圆在一条直线上滚动,就像车轮在地上滚动的那种效果呢?这时我们可以利用几何画板来实现这一效果,下面将介绍几何画板动态演示圆在线段上滚动的课件制作方法. 几何画板演示圆在线段上滚动的课件模板样图: 该课件的具体制作步骤如下: 1.绘制一条水平线段AB,再绘制一条水平线段CD. 2.在线段AB上绘制一点 P,选定点 P和线段CD,单击“构造”—“以圆心和半径绘圆”:选定点 P和线段AB,单击“构造”—“垂线”,作出垂线与圆的交点O.隐藏圆和垂线. 3.选定点A和点P,单击“度量”—“距离

编程题-线段上格点的个数-最大公约数

线段上格点的个数 给定平面上的两个格点P1(x1,y1)和P2(x2,y2),线段上P1P2上,除P1和P2以外一共有多少格点 虽然可以用穷举法,遍历min(x1,x2)≤x≤max(x1,x2)且min(y1,y2)≤y≤max(y1,y2)的格点可以得到正确答案,但是复杂度确实O(|x1?x2|×|y1?y2|),其实这个题的答案是|x1?x2|和|y1?y2|的最大公约数减去1.(注意,|x1?x2|=0且|y1?y2|=0时,答案为0) 原因,首先看一下|x1?x2|和|y1?y2|的最

如何 判断 设备 是否 连接 上 了 wifi

这里,我给出一个函数 1 public boolean sale_connect_check(WifiConfiguration wcg,Context context) { 2 boolean judge_2 = false;//二重判断的布尔变量 3 int wcgID = wifiManager.addNetwork(wcg);//获取所曾网络id 4 boolean judge = wifiManager.enableNetwork(wcgID, true);//就行操作,注意,网上很多