Подбор кривых неотсортированные точки на плоскости

В «вселенной операций перемещения» есть четыре возможности:

target          source
  is            is left
----------------------------------------------------------
constructed <-- constructed  // C++11 -- move construction
constructed <-- destructed
assigned    <-- constructed  // C++11 -- move assignment
assigned    <-- destructed

Каждая из этих операций полезна ! std::vector::insert один может использовать первые три. Хотя обратите внимание:

  • Источник 2-го и 4-го не должен иметь автоматического, статического или потокового хранения. Срок хранения источника должен быть динамическим, иначе компилятор вызовет деструктор для уже разрушенного объекта. И нет, компилятор не может (в общем) отслеживать, если объект был перемещен из:

X x1, x2;
if (sometimes)
{
    x1 = std::move(x2);
}
// Is x2 moved-from here?

  • 2-й и 4-й могут быть эмулированным 1-м и 3-м соответственно, просто вручную вызывая деструктор на источнике после операции.

  • 1-й и 3-й имеют решающее значение. Алгоритмы типа std::swap и std::sort регулярно нуждаются в обеих этих операциях. Этим алгоритмам не нужно разрушать ни один из их входных объектов & mdash; только меняйте их значения.

Вооружившись этими знаниями, в период 2001-2002 гг. Я сосредоточил свои усилия на двух операциях, которые оставили свой исходный код созданным, потому что эти две операции оказали бы наибольшее (положительное) влияние на то, что тогда было C ++. 98. В то время я знал, что если я не сверну амбиции этого проекта, то он никогда не будет успешным. Даже ограниченный, он был слишком амбициозным, чтобы добиться успеха.

Это сокращение признано в первоначальном предложении семантики перемещения в разделе, озаглавленном «Семантика разрушительного движения».

В конце концов, мы просто отказались от этого как от слишком большой боли для недостаточной выгоды. Однако текущее предложение не запрещает семантику разрушительного перемещения в будущем. Это можно сделать в дополнение к семантике неразрушающего движения, описанной в этом предложении, если кто-то захочет нести этот факел.

Подробнее о том, что можно делать с перемещенным объектом, см. https://stackoverflow.com/a/7028318/576911

.

27
задан Community 8 February 2017 в 14:12
поделиться

5 ответов

Ваши данные выглядят как двухмерный параметрический график (x, y) как функция некоторого базового параметра t . Таким образом, можно выполнить аппроксимацию методом наименьших квадратов x (t) и y (t) , если вы сможете найти разумное модель для них. Похоже, что ваши данные описывают лимакон .

9
ответ дан 28 November 2019 в 05:54
поделиться

Редактировать: nvm неверно истолковал вопрос. В любом случае я оставлю этот ответ здесь.

Может быть, попробуйте сначала найти выпуклую оболочку точек, а затем подогнать выпуклую оболочку на плоскости

http://www.cse.unsw.edu .au / ~ lambert / java / 3d / giftwrap.html <- включает java-анимацию реализации http://en.wikipedia.org/wiki/Convex_hull_algorithms

Если вам не нужна эффективность, есть несколько очень простых реализаций, например версия подарочной упаковки, которая равна O (n ^ 2) http://en.wikipedia.org/wiki/Gift_wrapping_algorithm

Версия «разделяй и властвуй» - O (nlogn)

1
ответ дан 28 November 2019 в 05:54
поделиться

Вам нужно будет выполнить несколько кусочков или шлицев. Не ожидайте, что какой-либо алгоритм сможет сделать все за один раз. Может быть как минимум три дуги: первая до перекрестка, петля, а затем назад от перекрестка вперед.

0
ответ дан 28 November 2019 в 05:54
поделиться

Эта проблема действительно сложна, если у вас нет заказа. Выполнить метод наименьших квадратов для некоторого (x (t), y (t)) легко - если вы знаете порядок t .

Возможно, вам понадобится что-то своего рода алгоритм поиска. Генетический алгоритм может подойти.

0
ответ дан 28 November 2019 в 05:54
поделиться

you could try to infer the ordering of the points, then apply the spline procedures. there is an ambiguity where the curve crosses itself, of course.

perhaps the most naive approach would be to compute the Delaunay Triangulation (nlogn time), from which approximate a Euclidian Minimum Distance Hamiltonian Cycle through the points. You would still have to figure out where the 'ends' are. From the ordering you could then apply the spline techniques. For a reference, see Finding Hamiltonian Cycles in Delaunay Triangulations Is NP-Complete, or Reinelt's paper on TSP heuristics, 1992, or EMST at Wikipedia

hth,

1
ответ дан 28 November 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: