Полигон, включающий ряд точек

Это отлично работает для меня. Он позволяет вводить значение даже после того, как фокус изменен и восстановлен обратно. Например: 123.00, 12.12, 0.01 и т. Д.

1. Integer.parseInt(getString(R.string.valuelength)) Определяет длину входа digits.Values, доступ к которому получен из файла string.xml. для изменения значений. 2. Integer.parseInt(getString(R.string.valuedecimal)), это максимальный предел десятичных мест.

private InputFilter[] valDecimalPlaces;
private ArrayList<EditText> edittextArray;

valDecimalPlaces = new InputFilter[] { new DecimalDigitsInputFilterNew(
    Integer.parseInt(getString(R.string.valuelength)),
    Integer.parseInt(getString(R.string.valuedecimal))) 
};

Массив значений EditText, который позволяет выполнять действие.

for (EditText etDecimalPlace : edittextArray) {
            etDecimalPlace.setFilters(valDecimalPlaces);

Я просто использовал массив значений, которые содержат несколько файлов edittext Next DecimalDigitsInputFilterNew.class.

import android.text.InputFilter;
import android.text.Spanned;

public class DecimalDigitsInputFilterNew implements InputFilter {

    private final int decimalDigits;
    private final int before;

    public DecimalDigitsInputFilterNew(int before ,int decimalDigits) {
        this.decimalDigits = decimalDigits;
        this.before = before;
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end,
        Spanned dest, int dstart, int dend) {
        StringBuilder builder = new StringBuilder(dest);
        builder.replace(dstart, dend, source
              .subSequence(start, end).toString());
        if (!builder.toString().matches("(([0-9]{1})([0-9]{0,"+(before-1)+"})?)?(\\.[0-9]{0,"+decimalDigits+"})?")) {
             if(source.length()==0)
                  return dest.subSequence(dstart, dend);
             return "";
        }
        return null;
    }
}
26
задан Igor Brejc 7 May 2009 в 16:23
поделиться

4 ответа

Существует много алгоритмов для этой проблемы. Он называется « минимальный ограничивающий прямоугольник ». Вы также найдете решения для поиска " выпуклой оболочки ", особенно здесь .

30
ответ дан 28 November 2019 в 07:25
поделиться

Вы, вероятно, имеете в виду, что вы хотите наименьшую площадь, которая является выпуклой оболочкой.

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

3
ответ дан SPWorley 25 September 2019 в 07:31
поделиться

Вот хороший ресурс по алгоритмам выпуклой оболочки: Выпуклая оболочка двумерного набора точек или многоугольника (автор Dan Sunday)

2
ответ дан Igor Brejc 25 September 2019 в 07:31
поделиться

Вот простое решение ...

Начните с любых трех точек, чтобы сформировать треугольник. Добавьте каждую дополнительную точку к многоугольнику с помощью следующей операции:

Разделите ребра на два непрерывных пути, где в одном пути линия каждого ребра отделяет точку, которая будет добавлена ​​от остальной части многоугольника (назовем это « разделяющий путь "), а на другом пути линия каждого ребра имеет точку на той же стороне, что и многоугольник.

(Примечание: пока ваша форма остается выпуклой, что и должно быть, эти два пути будут непрерывными и формируют всю форму)

Если разделительный путь не имеет ребер, точка находится внутри многоугольника и должна игнорироваться, в противном случае удалите разделительный путь из многоугольника. Замените его двумя сегментами, соединяющими каждую конечную точку разделяющего пути с новой точкой.

Та-да! :)

6
ответ дан 28 November 2019 в 07:25
поделиться
Другие вопросы по тегам:

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