- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我尝试使用 CGAL 的 Arrangement,但由于不明确的原因,CGAL 4.4 中的某些曲线程序崩溃(在以前的版本 4.3 中没有这样的问题)。看问题的简单概述,曲线是字母D的轮廓,转换成线段:
dDouble dpts { 16.261, 95.267, ... 95.267, 16.261, 95.267};
dPoint pts = ... // converting to exact points with 3 decimal places
Curve_2 cu = Curve_2(pts.begin(), pts.end());
insert(arr, cu); // <---- here crash, supposed bug in CGAL 4.4 ------
此外 insert() 也输出空行到标准输出。我用 cmake 提供了完整的例子配置文件和程序的输出。系统正在运行 Linux Mint Petra。
完整程序:
主要.cpp
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/Cartesian.h>
#include <CGAL/Arr_segment_traits_2.h>
#include <CGAL/Arr_polyline_traits_2.h>
#include <CGAL/Arr_curve_data_traits_2.h>
#include <CGAL/Arrangement_with_history_2.h>
#include <CGAL/Arr_extended_dcel.h>
#include <CGAL/intersections.h>
#include <CGAL/Gmpq.h>
typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;
typedef typename Kernel::FT Nt;
//***************************************************************
typedef CGAL::Aff_transformation_2<Kernel> Aff_Transformation_2;
typedef CGAL::Point_2<Kernel> Point_2;
//***************************************************************
typedef CGAL::Arr_segment_traits_2<Kernel> Segment_traits_2;
typedef CGAL::Arr_polyline_traits_2<Segment_traits_2> Polyline_traits_2;
typedef Polyline_traits_2::Curve_2 Curve_2;
typedef Polyline_traits_2 Traits_2; // renaming
typedef CGAL::Arr_extended_dcel<Traits_2, int, int, int> Dcel;
typedef CGAL::Arrangement_with_history_2<Traits_2, Dcel> Arrangement_2;
//***************************************************************
typedef CGAL::Gmpq Gmpq;
typedef std::deque<Point_2> dPoint_2;
typedef std::deque<double> dDouble;
#define MULVAL 1000
inline int toInt(double d, int mul) { return int(d*mul + .5); }
inline Gmpq toGmpq(double d, int mul=MULVAL) { return Gmpq(toInt(d,mul), mul); }
inline Point_2 toPoint_2(double x, double y, int mul=MULVAL) { return Point_2( Nt(toGmpq(x,mul)), Nt(toGmpq(y,mul)) ); }
int main() {
// simple D letter outline
dDouble dpts { 16.261, 95.267, 16.261, 48.027, 153.477, 48.027, 164.912, 49.104, 186.691, 51.458, 201.573, 54.251, 211.367, 56.921,
225.415, 61.957, 238.134, 68.049, 249.204, 74.952, 258.604, 82.468, 266.944, 91.033, 272.727, 98.754, 277.419,107.216, 280.673,116.053,
282.289,124.687, 282.364,132.995, 281.97, 136.238, 279.901,144.167, 276.218,152.181, 270.568,160.737, 262.216,170.448, 257.505,174.921,
248.805,181.405, 237.688,187.749, 221.082,195.281, 218.006,196.525, 204.35, 201.024, 187.094,204.993, 183.018,205.735, 165.239,208.084,
147.989,208.866, 16.261,208.866, 16.261,168.055, 38.329,167.772, 38.153, 95.267, 16.261, 95.267};
dPoint_2 pts;
for(int i=0;i<dpts.size()/2;i++) pts.push_back(toPoint_2(dpts[2*i],dpts[2*i+1])); // converting into exact points
for(auto &p : pts) std::cout << p << " | "; std::cout << "\n"; // control output
Arrangement_2 arr; // empty arrangement
Curve_2 cu = Curve_2(pts.begin(), pts.end());
insert(arr, cu); // bug in CGAL 4.4
std::cout << "Working\n";
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
SET(CMAKE_VERBOSE_MAKEFILE ON)
set(XXX main)
project(XXX)
SET(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_FLAGS "-std=c++0x -frounding-math")
find_package(CGAL QUIET COMPONENTS Core )
include( ${CGAL_USE_FILE} )
add_executable(${XXX} ${XXX}.cpp)
输出:cmake。
-- The C compiler identification is GNU 4.8.1
-- The CXX compiler identification is GNU 4.8.1
...
-- Using /usr/bin/c++ compiler.
-- Requested component: Core
-- Requested component: MPFR
-- Requested component: GMP
..
程序输出
16.261 95.267 | 16.261 48.027 | 153.477 48.027 | 164.912 49.104 | 186.691 51.458 | 201.573 54.251 | 211.367 56.921 | 225.415 61.957 |
238.134 68.049 | 249.204 74.952 | 258.604 82.468 | 266.944 91.033 | 272.727 98.754 | 277.419 107.216 | 280.673 116.053 | 282.289 124.687 |
282.364 132.995 | 281.97 136.238 | 279.901 144.167 | 276.218 152.181 | 270.568 160.737 | 262.216 170.448 | 257.505 174.921 | 248.805 181.405 |
237.688 187.749 | 221.082 195.281 | 218.006 196.525 | 204.35 201.024 | 187.094 204.993 | 183.018 205.735 | 165.239 208.084 | 147.989 208.866 |
16.261 208.866 | 16.261 168.055 | 38.329 167.772 | 38.153 95.267 | 16.261 95.267 |
terminate called after throwing an instance of 'CGAL::Precondition_exception'
what(): CGAL ERROR: precondition violation!
Expr: i != INVALID_INDEX
File: /usr/local/include/CGAL/Arr_polyline_traits_2.h
Line: 619
Aborted
最佳答案
确实是 4.4 中的一个错误。
下面的补丁应该可以修复它。
将在下一次正式修订中修复。
diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_polyline_traits_2.h b/Arrangement_on_surface_2/include/CGAL/Arr_polyline_traits_2.h
index 1a04d7d..aa48ded 100644
--- a/Arrangement_on_surface_2/include/CGAL/Arr_polyline_traits_2.h
+++ b/Arrangement_on_surface_2/include/CGAL/Arr_polyline_traits_2.h
@@ -2742,8 +2742,7 @@ namespace CGAL {
* If q is not in the x-range of cv, returns INVALID_INDEX.
*/
template <typename Compare>
- std::size_t locate_gen(const X_monotone_curve_2& cv,
- Compare compare) const
+ std::size_t locate_gen(const X_monotone_curve_2& cv, Compare compare) const
{
// The direction of cv. SMALLER means left-to-right and
// otherwise right-to-left
@@ -2766,7 +2765,14 @@ namespace CGAL {
Comparison_result res_to = compare(cv[to], ARR_MAX_END);
if (res_to == EQUAL) return to;
- if (res_to == res_from) return INVALID_INDEX;
+ // Check whether the point is either lexicographically to the left of
+ // the curve or lexicographically to the right of the curve.
+ if (res_to == res_from)
+ // If the x-monotone polyline is vertical, return the index of the
+ // segment that is closest to the point. Otherwise, the point is not
+ // in the x-range of the polyline.
+ return (is_vertical_2_object()(cv)) ?
+ ((res_to == SMALLER) ? from : to) : INVALID_INDEX;
// Perform a binary search to locate the segment that contains q in its
// range:
关于c++ - CGAL 4.4 安排插入(arr,曲线)与一些曲线崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24224960/
我们有一个接口服务为下游的系统提供数据服务,本来好好的大家都愉快地传递JSON,非常和谐。可最近有个新需求去对接一个很老的系统,这倒是不算啥,可这个老系统数据不是以JSON传递的而是以XML传递
我想完成这样的事情: results = [] for i in range(N): data = generate_data_slowly() res = tasks.process
如何安排 SSIS 每天在给定时间从文件中自动执行包? 最佳答案 你有几个选择,但我会给你一些让你快速启动和运行的东西...... 打开 SQL Server Management Studio 并连
我们有两个服务器 Azure 配置,运行由 Umbraco 提供支持的网站。当我们需要向Azure服务器添加新域时,我们修改配置文件,然后依次重新启动每台服务器。 理论上,因为我们永远不会同时重新启动
我给出了一个创建电子邮件 C# 控制台应用程序的任务,该应用程序的目标是批量运行。我对 C# 领域非常陌生,因此我不知道我的方向。此 C# 控制台应用程序将部署在服务器上,并期望根据服务器时间在特定时
我有一个控制台应用程序,运行时会执行一些操作,并使用docker生成它的镜像。现在,我想将其部署到Kubernetes并每小时运行一次,是否有可能在K8中完成? 我已经阅读了有关Cron作业的信息,但
这是我的 CronJob 规范的一部分: kind: CronJob spec: schedule: #{service.schedule} 对于特定环境,设置了 cron 作业,但我从不希望
我的任务是创建一个应用程序,该应用程序将每 (n) 分钟向选定的收件人发送一封电子邮件。它所在的应用程序的结构方式是通过回调 .main(args) 来重置自身。每当需要的时候。我的问题是,当我调用.
安排 Airflow Dag 使其仅在工作日运行的正确方法是什么?我已经尝试在 start_date 和 schedule_interval 表达式中都包含小时偏移量,但它仍然没有在所需的时间开始。
我有许多测试都安排了一些 TestFixtures,我发现我正在复制该安排代码很多。每个测试的前几行几乎相同。 有没有一种方法可以在所有测试中声明一个共享的 TestFixture,同时仍然在每个测试
我有一个问题,我正在创建一个应用程序,我想在系统与 azan 时间匹配时在后台播放 azan 文件,无论用户正在使用应用程序的任何屏幕,azan 都应该开始播放。 我在 Azan.java 中创建了一
在我没有重启我的手机之前一直在 toast ,但是在重启之后 broadcastreceiver2 没有收到并且没有任何反应。 我关注了http://stacktips.com/tutorials/a
自动将一个数据库表的表数据复制到另一个数据库表;当表格更新或按某个特定时间间隔更新时,安排 数据库MySQL;语言 PHP 我有两个数据库; A和B 数据库 A 包含一个表 USERS 我想将USER
我的 Android 应用程序将定期轮询服务器以检查数据。我希望无论用户与应用程序交互如何进行此轮询,类似于(在概念上)Gmail 和 Google Reader 应用程序如何在后台同步数据。安装应用
我可以将android中的警报管理器(.set()方法)安排到当前时间一个月后的时间吗它会活那么久吗?操作系统对此 alarmManager 有何影响? 最佳答案 用户重启手机时的提示。您可以使用以下
安排 AsyncTask 每分钟运行一次的最佳做法是什么(请注意,在 AsyncTask 完成后我应该能够更新 UI)。 我不打算使用服务,因为这些任务应该只在应用处于 Activity 状态时运行。
我在排列从 php 中的 while 循环返回的数据时遇到问题。 基本上,我正在尝试从数据库返回工作的时间段计划,问题是我似乎在所有时间段中得到相同的结果,或者在一个时间段中的所有客户端得到相同的结果
我想创建一个仅在周六和周四运行的 mysql 事件。 是否可以定义事件本身的日期? 我有一个想法,每天运行调度程序,如果是星期四或星期六,则该过程将继续,否则它将退出调度程序而不执行任何操作。 最佳答
如何使用 MySQL 调度程序安排查询运行(如果这是最好的方法)?我按照 link here 中的说明进行操作但我有点迷路了。 我想在我们拥有的特定数据库上每 30 分钟运行一次以下查询。 u
我想在使用事件轮换我的日志后读取我的表日志,我希望我的事件在我选择的一周中的任何一天运行。 经过一番研究,我想到了这个 CREATE EVENT read_rotated_logs ON SCHEDU
我是一名优秀的程序员,十分优秀!