相关疑难解决方法(0)

如何检测两个线段相交的位置?

如何确定两条线是否相交,如果它们相交,在x,y点处是什么?

geometry line-intersection

519
推荐指数
17
解决办法
41万
查看次数

如何检查线段是否与矩形相交?

如果你有2个点,(x1,y1)和(x2,y2),它们代表一个矩形的两个相对的角,还有另外两个点,(x3,y3)和(x4,y4),它们代表a的2个端点线段,如何检查线段是否与矩形相交?

(线段只是给定端点之间包含的段.它不是由这两个点定义的无限长度线.)

language-agnostic algorithm geometry computational-geometry

29
推荐指数
1
解决办法
4万
查看次数

检查两个线段是否发生碰撞(仅检查它们是否相交,而不是相交)

我需要一个快速算法来检查两条非无限线是否正在交叉.必须快速,因为它会在手机上运行很多.

该算法只需要返回yes或no,它不必确切地找出线交叉的位置!

我看过这里:你如何检测两个线段相交的位置? 但是这个线程是一个丛林,人们一直在说"这就是答案"但是其他两个人说这是错误的,因为这个和那个错误.

请帮我找到一个好的和有效的算法.

为了清楚起见:我需要一个你给出的函数
lineApointAx
lineApointAy
lineApointBx
lineApointBy
lineBpointAx
lineBpointAy
lineBpointBx
lineBpointBy
......并且返回true或false,具体取决于两条线是否交叉.

如果你回答(伪)代码,而不是公式,我将不胜感激.

algorithm math intersection

23
推荐指数
2
解决办法
3万
查看次数

线条绘制+该线条与self的交点,还可以检测绘制线条内的CCSprites

我正在使用以下代码绘制线条,它的工作效果令人惊叹,

http://www.merowing.info/2012/04/drawing-smooth-lines-with-cocos2d-ios-inspired-by-paper/

现在我想......

1>检测线是否与自身相交.2)检测CCSprite是否在此闭合线内.

在搜索时,我遇到了LineIntersection的许多逻辑,但没有一个是准确的.我给它们中的一个检测交叉点,但是当没有交叉线时它也检测到它.

  1. 第一种方法

    - (BOOL) lineIntersectOccured:(CGPoint)t1 pointEnd:(CGPoint)t2
    {
        BOOL result = NO;
        int pointsCount = [arrlinePoints count];
    
        CGPoint cp1;
        CGPoint cp2;
    
        for(int i = 0, j = 1; j < pointsCount; i++,j++)
        {
            [[arrlinePoints objectAtIndex:i] getValue:&cp1];
            [[arrlinePoints objectAtIndex:j] getValue:&cp2];
    
            // lines connected do not need to be included.
            if((cp2.x == t1.x && cp2.y == t1.y) || (cp1.x == t2.x && cp1.y == t2.y))
            {
                continue;
            }
    
            CGPoint diffLA = CGPointMake(cp2.x - cp1.x,cp2.y - cp1.y);
            CGPoint diffLB = …
    Run Code Online (Sandbox Code Playgroud)

line-intersection cocos2d-iphone line-drawing ios ccsprite

10
推荐指数
1
解决办法
945
查看次数

找出2条线是否相交

可能重复:
如何检测两个线段相交的位置?
确定两个线段是否相交?

给定两条线l1 =((A0,B0),(A1,B1))和l2 =((A2,B2),(A3,B3)); Ax,Bx是整数,(Ax,Bx)指定行的开始和结束.

是否存在仅使用整数运算来确定l1和l2是否相交的算法?(只需要一个布尔答案.)

我自己的方法是用定点算术计算交点附近的点.然后用以下等式代替解(a,b):

I:abs((A0 + a*(A1-A0)) - (A2 + b*(A3-A2)))<公差
II:abs((B0 + a*(B1-B0)) - (B2 + b*(B3-B2)))<公差

如果I和II都评估为true,我的方法应该返回true.

我的C++ - 代码:
vec.h:

#ifndef __MY_VECTOR__
#define __MY_VECTOR__
#include <stdarg.h>
template<typename VType, unsigned int dim>
class vec {
private:
    VType data[dim];
public:
    vec(){}
    vec(VType v0, ...){
            data[0] = v0;
            va_list l;
            va_start(l, v0);
            for(unsigned int i=1; i<dim; ++i){
                    data[i] = va_arg(l, VType);
            }
            va_end(l);
    }
    ~vec(){}
    VType& operator[](unsigned int i){
            return data[i];
    }
    VType …
Run Code Online (Sandbox Code Playgroud)

c++ geometry linear-algebra

6
推荐指数
1
解决办法
2万
查看次数