【问题标题】:Clipping line to triangle c++剪裁线到三角形c ++
【发布时间】:2013-04-02 14:56:08
【问题描述】:

在裁剪算法中,有许多技术,例如用于 2D 线裁剪的 Cohen-Sutherland、Cyrus-Beck 算法,还有许多其他用于圆形和多边形的技术。但我正在寻找一种将线条剪辑到 C++ 中的三角形窗口的方法,如下图所示:

所以我有三种情况,第一种是线在必须绘制的三角形内部,第二种情况是在三角形外部,不能绘制,第三种情况线在三角形内部有一个端点,第二种情况在外部需要将其裁剪到三角形边框,那么就处理性能而言,最好的方法是什么?!

【问题讨论】:

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

标签: c++ graphics


【解决方案1】:

你需要的基本原则是计算三角形每一边的交点,并计算出交点是在边缘内部还是在角之外(相交算法应该给你)。

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

您只需轮流为每一边执行此操作即可。

【讨论】:

    猜你喜欢
    • 2016-02-11
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 2018-08-22
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多