c++ - 我在多边形函数中的观点有什么问题?
问题描述
我正在尝试在 Photoshop 或其他类似的图像编辑程序中制作套索功能。
我在多边形函数中有一个点,它检查图像中的每个像素是否位于定制的多边形内
然而,这些线会出现,并且该函数表示这些像素位于给定的多边形内。
多边形函数中的点:
#define INF 10000
struct Point
{
int x;
int y;
};
bool onSegment(Point p, Point q, Point r)
{
if (q.x <= max(p.x, r.x) && q.x >= min(p.x, r.x) &&
q.y <= max(p.y, r.y) && q.y >= min(p.y, r.y))
return true;
return false;
}
int orientation(Point p, Point q, Point r)
{
int val = (q.y - p.y) * (r.x - q.x) -
(q.x - p.x) * (r.y - q.y);
if (val == 0) return 0;
return (val > 0) ? 1 : 2;
}
bool doIntersect(Point p1, Point q1, Point p2, Point q2)
{
int o1 = orientation(p1, q1, p2);
int o2 = orientation(p1, q1, q2);
int o3 = orientation(p2, q2, p1);
int o4 = orientation(p2, q2, q1);
if (o1 != o2 && o3 != o4)
return true;
if (o1 == 0 && onSegment(p1, p2, q1)) return true;
if (o2 == 0 && onSegment(p1, q2, q1)) return true;
if (o3 == 0 && onSegment(p2, p1, q2)) return true;
if (o4 == 0 && onSegment(p2, q1, q2)) return true;
return false;
}
bool isInside(vector<Point> polygon, Point p)
{
int n = polygon.size();
if (n < 3) return false;
Point extreme = { INF, p.y };
int count = 0, i = 0;
do
{
int next = (i + 1) % n;
if (doIntersect(polygon[i], polygon[next], p, extreme))
{
if (orientation(polygon[i], p, polygon[next]) == 0)
return onSegment(polygon[i], p, polygon[next]);
count++;
}
i = next;
} while (i != 0);
return count & 1;
}
解决方案
推荐阅读
- facebook-marketing-api - 如何在通过 Facebook 营销 API 创建 LeadGen 表单时修复“缺少法律内容”错误
- javascript - 错误:您可能需要适当的加载器来处理此文件类型 - Fusion Js,使用图标
- javascript - 是否有实现带有 2 个国家标志和一些文本的 Card 我正在使用带有 expo 的 react-native-element 库
- wso2 - Data Mapper Mediator 和 Payload Factory Mediator 的区别
- docusignapi - 将标头从 Docusign Connect 传递到 webhook
- r - 将 x 轴与 grid.arrange 对齐
- sql - 从 col2 为 NULL 的 col 中选择 group by
- xcode - React Native:将项目升级到 0.58.0 后 iOS 构建崩溃
- r - 在保持形状覆盖的同时将图例分成两列
- ios - 键盘有时会显示在 iOS 的文本字段选择器视图中