cocos2d-x 判断两条直线是否相交

bool GraphicsUtil::linesCross(b2Vec2 v0, b2Vec2 v1, b2Vec2 t0, b2Vec2 t1, b2Vec2 &intersectionPoint)
{
    if ( areVecsEqual(v1,t0) ||
        areVecsEqual(v0,t0) ||
        areVecsEqual(v1,t1) ||
        areVecsEqual(v0,t1) )
        return false;

    b2Vec2 vnormal = v1 - v0;
    vnormal = b2Cross(1.0f, vnormal);
    float v0d = b2Dot(vnormal, v0);
    float t0d = b2Dot(vnormal, t0);
    float t1d = b2Dot(vnormal, t1);
    if ( t0d > v0d && t1d > v0d )
        return false;
    if ( t0d < v0d && t1d < v0d )
        return false;

    b2Vec2 tnormal = t1 - t0;
    tnormal = b2Cross(1.0f, tnormal);
    t0d = b2Dot(tnormal, t0);
    v0d = b2Dot(tnormal, v0);
    float v1d = b2Dot(tnormal, v1);
    if ( v0d > t0d && v1d > t0d )
        return false;
    if ( v0d < t0d && v1d < t0d )
        return false;

    intersectionPoint = v0 + ((t0d-v0d)/(v1d-v0d)) * (v1-v0);

    return true;
}
时间: 2024-10-16 03:16:52

cocos2d-x 判断两条直线是否相交的相关文章

poj1039——计算几何 求直线与线段交点,判断两条直线是否相交

poj1039——计算几何  求直线与线段交点,判断两条直线是否相交 Pipe Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9439   Accepted: 2854 Description The GX Light Pipeline Company started to prepare bent pipes for the new transgalactic light pipeline. During the de

使用叉积判断两条直线是否相交

两条平面直线是否相交(直线长度大于0,可以重叠) 直线为(x1,y1),(x2,y2)和(x3,y3),(x4,y4) #include <iostream> using namespace std; int cj(int a1,int a2,int b1,int b2,int c1,int c2){     return (c1-a1)*(b2-a2)-(c2-a2)*(b1-a1);} int main(){    int x1,x2,x3,x4,y1,y2,y3,y4;   while(

C# 判断两条直线是否相交

直接上代码,过程不复杂 /// <summary> /// 判断两条线是否相交 /// </summary> /// <param name="a">线段1起点坐标</param> /// <param name="b">线段1终点坐标</param> /// <param name="c">线段2起点坐标</param> /// <param

判断两条直线是否相交点

#pragma mark ------------ 判断两条直线是否相交 + (BOOL)checkLineIntersection:(CGPoint)p1 p2:(CGPoint)p2 p3:(CGPoint)p3 p4:(CGPoint)p4 {     CGFloat denominator = (p4.y - p3.y) * (p2.x - p1.x) - (p4.x - p3.x) * (p2.y - p1.y);          if (denominator == 0.0f) {

POJ1269:Intersecting Lines(判断两条直线的关系)

题目:POJ1269 题意:给你两条直线的坐标,判断两条直线是否共线.平行.相交,若相交,求出交点. 思路:直线相交判断.如果相交求交点. 首先先判断是否共线,之后判断是否平行,如果都不是就直接求交点了. #include <iostream> #include <string.h> #include <stdio.h> #include <algorithm> #include <math.h> #include <queue> #

判断两条直线的位置关系 POJ 1269 Intersecting Lines

两条直线可能有三种关系:1.共线     2.平行(不包括共线)    3.相交. 那给定两条直线怎么判断他们的位置关系呢.还是用到向量的叉积 例题:POJ 1269 题意:这道题是给定四个点p1, p2, p3, p4,直线L1,L2分别穿过前两个和后两个点.来判断直线L1和L2的关系 这三种关系一个一个来看: 1. 共线. 如果两条直线共线的话,那么另外一条直线上的点一定在这一条直线上.所以p3在p1p2上,所以用get_direction(p1, p2, p3)来判断p3相对于p1p2的关

判断两条链表是否相交(公共部分)并找出相交处

Problem: 两个单链表相交的一系列问题 [题目] 在本题中,单链表可能有环,也可能无环.给定两个 单链表的头节点 head1和head2,这两个链表可能相交,也可能 不相交.请实现一个函数, 如果两个链表相交,请返回相交的 第一个节点:如果不相交,返回null 即可. 要求: 如果链表1 的长度为N,链表2的长度为M,时间复杂度请达到 O(N + M),额外 空间复杂度请达到O(1) Solution: 对于判断单链表是否有环,则使用快慢指针即可知道,两指针相交,则有环 对于判断双链表是否

Intersecting Lines--POJ1269(判断两条直线的关系 &amp;&amp; 求两条直线的交点)

http://poj.org/problem?id=1269 我今天才知道原来标准的浮点输出用%.2f   并不是%.2lf  所以wa了好几次 题目大意:   就给你两个线段 然后求这两个线段所在的直线的关系  有共线  平行  和相交 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<ctype.h> #include<math.h> #define N 200

【图形】点与直线位置判断(求点位于那两条直线之间)

应用情况: 给出一系列车道线(首尾端点),希望找出车位于哪个车道上.由于数据来源于图像投影,车道线彼此并不平行. 方案A: 假设车道线都在90度左右,则可直接利用点的x坐标与车道线两端平均x坐标距离进行判断.取x坐标距离最近的两条直线 方案B: 进一步推广到任意方向的直线,则可求点到车道线的距离.取点到直线距离最近的两条 参考:Point到直线 y = kx + b 距离 distance = abs(k * Point.x -  Point.y + b)/sqrt(k * k + 1); 方案