Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将直线裁剪到三角形c++;_C++_Graphics - Fatal编程技术网

C++ 将直线裁剪到三角形c++;

C++ 将直线裁剪到三角形c++;,c++,graphics,C++,Graphics,在裁剪算法中有许多技术,例如用于二维直线裁剪的Cohen–Sutherland、Cyrus–Beck算法,还有许多其他用于圆和多边形的技术。但我正在寻找这样一种方法,将线剪辑成三角形窗口,就像在C++中解释的那样: 所以我有三种情况,第一种情况是直线在三角形内,必须画,第二种情况是在三角形外,不能画,第三种情况是直线在三角形内有一个端点,第二种情况是在三角形外,需要修剪到三角形的边界,那么,在处理性能方面,什么是最好的方法呢 这里需要的基本原则是计算三角形每边的交点,并计算出交点是在边内还是在

在裁剪算法中有许多技术,例如用于二维直线裁剪的Cohen–Sutherland、Cyrus–Beck算法,还有许多其他用于圆和多边形的技术。但我正在寻找这样一种方法,将线剪辑成三角形窗口,就像在C++中解释的那样:


所以我有三种情况,第一种情况是直线在三角形内,必须画,第二种情况是在三角形外,不能画,第三种情况是直线在三角形内有一个端点,第二种情况是在三角形外,需要修剪到三角形的边界,那么,在处理性能方面,什么是最好的方法呢

这里需要的基本原则是计算三角形每边的交点,并计算出交点是在边内还是在角外(交点算法应该给出)

基本上,线段A-B与三角形边C-D的交点将给出交点时间,其中A和C表示时间=0,B和D表示时间1。两条线段的任何介于0和1之间的值都表示它们相交,您需要修改正在测试的线段,以便三角形外的点放置在交点上。任何超出该范围的值都意味着您可以忽略三角形的那一侧。(要么线段完全位于三角形外部,要么用其他两条边将其剪裁。)


您只需依次对每一侧执行此操作。

第四种情况是,直线的两端都在三角形之外,但直线穿过三角形边界。(想想案例1,但把线向两个方向延伸)你关心这个案例吗?你说的这个案例属于其他两个案例中的一个,也属于逻辑中的一个。点积,很多点积。:)不要忘记边界情况,其中直线与三角形的一条边完全相同。@jkerian还有另一条,其中线段位于其中一条边上。:)