- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以使用两个 return 语句将 std::partition 与条件一起使用?
在我的示例中,我想根据彼此之间的距离将线段分成几组。非相交线段之间的最小距离可以计算为线 1(左线)和线 2(右线)的端点之一之间的距离。
但也有可能第 1 行的另一个端点更接近第 2 行。这是一些代码:
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
float getDistance(float x1, float y1, float x2, float y2) {
float diff_x = x2 - x1;
float diff_y = y2 - y1;
float distance = sqrtf(diff_x*diff_x + diff_y * diff_y);
return distance;
}
float getMinimumDistance(Point2f point, Point2f startpoint, Point2f endpoint) {
// Return minimum distance between line segment vw and point p
const float l2 = (endpoint.x - startpoint.x)*(endpoint.x - startpoint.x) + (endpoint.y - startpoint.y)*(endpoint.y - startpoint.y); // i.e. |w-v|^2 - avoid a sqrt
if (l2 == 0.0) {
return getDistance(point.x, point.y, startpoint.x, startpoint.y); // v == w case
}
const float t = std::max(float(0), std::min((float)1, ((point.x - startpoint.x)*(endpoint.x - startpoint.x) + (point.y - startpoint.y)*(endpoint.y - startpoint.y) / l2)));
const Point2f projection = Point2f(startpoint.x + t * (endpoint.x - startpoint.x), startpoint.y + t * (endpoint.y - startpoint.y)); // Projection falls on the segment
return getDistance(point.x, point.y, projection.x, projection.y);
}
int main(int argc, char** argv)
{
// Create some values - both vectors have the same size
vector<Vec4f> line_segments_1;
line_segments_1.push_back(Vec4f(1.0, 1.0, 5.0, 5.0));
line_segments_1.push_back(Vec4f(2.0, 0.5, 5.0, 2.5));
line_segments_1.push_back(Vec4f(0.0, 0.5, 1.0, 2.5));
line_segments_1.push_back(Vec4f(5.0, 1.0, 5.0, 4.0));
line_segments_1.push_back(Vec4f(3.0, 1.0, 4.0, 3.0));
line_segments_1.push_back(Vec4f(5.0, 5.0, 1.0, 5.0));
line_segments_1.push_back(Vec4f(4.0, 8.0, 8.0, 4.0));
line_segments_1.push_back(Vec4f(8.0, 4.0, 8.0, 1.0));
line_segments_1.push_back(Vec4f(7.0, 2.0, 9.0, 3.0));
int pixel_tolerance = 2;
vector<int> labels;
// Using std::partition
if (line_segments_1.size() > 1) {
int n_labels = partition(line_segments_1, labels, [pixel_tolerance](const Vec4f &left_line, const Vec4f &right_line) { // Clustering using partition, the pixel tolerance and two conditions
return getMinimumDistance(Point2f(left_line[0], left_line[1]), Point2f(right_line[0], right_line[1]), Point2f(right_line[2], right_line[3])) < pixel_tolerance; // If one statement is true, the lines belong to a cluster
return getMinimumDistance(Point2f(left_line[2], left_line[3]), Point2f(right_line[0], right_line[1]), Point2f(right_line[2], right_line[3])) < pixel_tolerance;
});
}
}
最佳答案
第一个return
总是结束函数,第二个是不可达的。
您可能需要的是逻辑或,拼写为 ||
return (getMinimumDistance(Point2f(left_line[0], left_line[1]), Point2f(right_line[0], right_line[1]), Point2f(right_line[2], right_line[3])) < pixel_tolerance)
|| (getMinimumDistance(Point2f(left_line[2], left_line[3]), Point2f(right_line[0], right_line[1]), Point2f(right_line[2], right_line[3])) < pixel_tolerance);
关于c++ - 带有两个返回语句的 std::partition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50366973/
我正在开发一个小型图书馆,我需要做的一件事是让访问者访问一些数据并返回结果。 在一些较旧的 C++ 代码中,访问者需要声明一个 typedef return_type .例如,boost::stati
我正在尝试使用std:map类型的键和值制作std::any Visual Studio 2017 std::map m("lastname", "Ivanov"); std::cout (m["la
我已经在 C++ 的 map 中声明了一个集合为 std::map> .如何循环访问或打印设定值? 最佳答案 如果你知道如何迭代 std::map或 std::set单独地,您应该可以毫无问题地组合迭
如何循环? 我已经试过了: //----- code std::vector >::iterator it; for ( it = users.begin(); it != users.end();
我有两个用例。 A.我想同步访问两个线程的队列。 B.我想同步两个线程对队列的访问并使用条件变量,因为其中一个线程将等待另一个线程将内容存储到队列中。 对于用例 A,我看到了使用 std::lock_
我正在查看这两种类型特征的文档,但不确定有什么区别。我不是语言律师,但据我所知,它们都适用于“memcpy-able”类型。 它们可以互换使用吗? 最佳答案 不,这些术语不能互换使用。这两个术语都表示
我有以下测试代码,其中有一个参数 fS,它是 ofstream 的容器: #include #include #include #include int
这是这个问题的延续 c++ function ptr in unorderer_map, compile time error 我试图使用 std::function 而不是函数指针,并且只有当函数是
std::unordered_map str_bool_map = { {"a", true}, {"b", false}, {"c", true} }; 我们可以在此映射上使
我有以下对象 std::vector> vectorList; 然后我添加到这个使用 std::vector vec_tmp; vec_tmp.push_back(strDRG); vec_tmp.p
为什么 std::initializer_list不支持std::get<> , std::tuple_size和 std::tuple_element ?在constexpr中用得很多现在的表达式,
我有一个像这样定义的变量 auto drum = std::make_tuple ( std::make_tuple ( 0.3f , Ex
假设我有一个私有(private)std::map在我的类(class)里std::map 。我怎样才能将其转换为std::map返回给用户?我想要下面的原型(prototype) const std
假设我有一个私有(private)std::map在我的类(class)里std::map 。我怎样才能将其转换为std::map返回给用户?我想要下面的原型(prototype) const std
问题 我正在尝试将 lambda 闭包传递给 std::thread,它使用任意封闭参数调用任意封闭函数。 template std::thread timed_thread(Function&& f
我想创建一个模板类,可以容纳容器和容器的任意组合。例如,std::vector或 std::map ,例如。 我尝试了很多组合,但我必须承认模板的复杂性让我不知所措。我编译的关闭是这样的: templ
我有一个 std::vector>我将其分配给相同类型的第二个 vector 。 我收到这个编译器错误: /opt/gcc-8.2.0/include/c++/8.2.0/bits/stl_algob
有时候,我们有一个工厂可以生成一个 std::unique_ptr vector ,后来我们想在类/线程/你命名的之间共享这些指针。因此,最好改用 std::shared_ptr 。当然有一种方法可以
这个问题在这里已经有了答案: Sorting a vector of custom objects (14 个答案) 关闭 6 年前。 我创建了一个 vector vector ,我想根据我定义的参
我有三个类(class)成员: public: std::vector > getObjects(); std::vector > getObjects() const; privat
我是一名优秀的程序员,十分优秀!