Программное рисование многоугольника с использованием вектора - PullRequest
0 голосов
/ 17 ноября 2018

Я делаю проект на Java с использованием Android Studio, где мне нужно нарисовать многоугольник с вектором утилит.Мне нужно, чтобы пользователь вставил желаемое количество сторон для многоугольника, а затем нарисовал многоугольник с номером на входе сторонами.Я был бы очень рад, если бы кто-нибудь мог помочь мне, потому что я все еще начинаю на Java.
Это мой файл Poligono.java:

import java.util.Vector;

public class Poligono extends Reta{

    Vector<Ponto2D> pontos_poligono;
    static int verifica_pontos=0;


    public Poligono(Vector<Ponto2D> p5){

        this.pontos_poligono=p5;
        verifica_pontos=p5.size(); //Numero total de pontos no Vector (exemplo no array number=0 number=1 -> o size é 2)

    }

    public Double PerimetroPoligono(){

        double perimetro=0;


        for (int i=0; i < verifica_pontos ;i++){

            Ponto2D pinicial = pontos_poligono.get(i);
            Ponto2D pfinal = pontos_poligono.get(i+1);

            perimetro+=pinicial.dist(pfinal);
        }

        return perimetro;

    }

}

А это Ponto2D.java:

public class Ponto2D {
    int x, y;

    public Ponto2D() {
        this.x = 0;
        this.y = 0;
    }

    public Ponto2D(int a, int b) {
        x = a;
        y = b;
    }
}

И Reta.java:

public class Reta {
    Ponto2D pinicial;
    Ponto2D pfinal;

    public Reta(){
        pinicial = new Ponto2D();
        pfinal = new Ponto2D();
    }


    public Reta(Ponto2D a, Ponto2D b){
        pinicial = a;
        pfinal = b;
    }
}

1 Ответ

0 голосов
/ 18 ноября 2018

Ваш пост не ясен на 100%.Прежде всего, вы не можете «нарисовать» многоугольник с вектором (это способ хранения данных).Вы должны использовать некоторую графическую библиотеку, создать окно, создать холст и так далее ... Если вы хотите вместо этого концептуально представить полигон, вот мое мнение.Предположим, что вам нужен реголярный многоугольник, мы можем использовать sin ad cos для вычисления положения вершин ( см. ).Вы можете создать Вектор, который хранит все вершины многоугольника.Я предлагаю расширить Ponto2D, чтобы вы могли хранить в x и y координаты центра.

import java.util.Vector;

public class Poligono extends Ponto2D{

    private Vector<Ponto2D> vertices;
    private int num_vertices

    public Poligono(int num_vertices){
        super(); //If you use a center != (0,0) you have 
        //to add the center coordinates to all the vertices

        //You also should add a radius (distance from
        //the center to all vertices);
        this.num_vertices=num_vertices;
        this.radius=radius;
        vertices=new Vector<>();
        fillVector();
    }


    //This method calculate all the vertices position and
    //store it in the Vector
    private void fillVector(){
        for(int i=0; i<num_vertices;i++){
            //use sin and cos to calculate vertices
            for (int i = 0; i < sides; ++i) {
                x = (int) (Math.cos(theta * i));
                y = (int) (Math.sin(theta * i));
                vertices.add(new Ponto2D(x,y));
            }
        }
    } 


    public Double PerimetroPoligono(){

        //take every point of the vector, and add the distances between them.

    }
}
...