亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我有坐標列表,我的要求是安排它

我有坐標列表,我的要求是安排它

MMMHUHU 2023-10-13 16:31:53
我有要畫線的坐標列表。實際上問題是這些坐標不按順序排列。結束線的坐標是另一條線的起始線的坐標。如果任何線的結束線坐標與另一條線的起始坐標不匹配,則創建連接線列表。線的坐標為startx,starty,endx,endy。下面是線坐標列表。3350 1500 3200 15001450 1750 1450 22001450 2200 2100 22002400 2200 2550 22002550 2200 2550 23502550 2350 2850 23502850 2350 2850 27002850 2700 3350 27003650 2700 3750 27003750 2700 3750 26003750 2600 5250 26005250 2600 5250 23505250 2350 5000 23504700 2350 4350 23504350 2350 4350 16004350 1600 3650 16003650 1600 3650 15003200 1500 3200 17503200 1750 1450 1750這里最后兩條線坐標實際上位于第二和第三位置。3200 1500 3200 17503200 1750 1450 1750我的要求是創建所有相互連接的線。List<DeviceElement> outerListWire= new ArrayList<DeviceElement>(schematicImporter.listOfWires);List<DeviceElement> innerListWire = new ArrayList<DeviceElement>(schematicImporter.listOfWires);    List<DeviceElement> listWireTemp = new ArrayList<DeviceElement>();for (int j = 0; j < outerListWire.size(); j++) {    Wire wire1 = (Wire) outerListWire.get(j);    for (int i = 0; i < innerListWire.size(); i++) {        Wire wire2 = (Wire) innerListWire.get(i);        if (wire1.getEndPoint().getX() == wire2.getStartPoint().getX() && wire1.getEndPoint().getY() == wire2.getStartPoint().getY() ) {            if (!listWireTemp.contains(wire1)) {                listWireTemp.add(wire1);                System.out                .println("wire1 = " + wire1.getStartPoint().toString() + " = " + wire1.getEndPoint().toString());                innerListWire.remove(wire1);            }            if (!listWireTemp.contains(wire2)) {                listWireTemp.add(wire2);                System.out                .println("wire2 = " + wire2.getStartPoint().toString() + " = " + wire2.getEndPoint().toString());                innerListWire.remove(wire2);            }        }    }}我已經嘗試過上面的代碼,但坐標列表仍然沒有按順序排列。
查看完整描述

1 回答

?
MM們

TA貢獻1886條經驗 獲得超2個贊

基于以下假設進行更新:

  1. 問題中給出的第一行坐標表示連接線集中第一條線的坐標

  2. 找到第一組連接線后,問題中給出的剩余坐標線中第一條未使用的線將被視為下一組連接線中第一條線的坐標,依此類推,直到問題中給出的坐標列表為止問題排氣。

所需的邏輯在Main.java. 我還創建Point.javaLine.java測試了邏輯。如果您遇到任何問題,請隨時告訴我。

Point.java

public class Point {

    int x,y;


    public Point(int x, int y) {

        super();

        this.x = x;

        this.y = y;

    }

    public int getX() {

        return x;

    }


    public void setX(int x) {

        this.x = x;

    }


    public int getY() {

        return y;

    }


    public void setY(int y) {

        this.y = y;

    }

    @Override

    public String toString() {

        return "Point [x=" + x + ", y=" + y + "]";

    }   

}

Line.java


public class Line {

    int x1,y1,x2,y2;

    Point start,end;

    boolean used;

    public Line(int x1, int y1, int x2, int y2) {

        super();

        this.x1 = x1;

        this.y1 = y1;

        this.x2 = x2;

        this.y2 = y2;

    }

    public Line(Point start, Point end) {

        super();

        this.start = start;

        this.end = end;

    }

    public int getX1() {

        return x1;

    }

    public void setX1(int x1) {

        this.x1 = x1;

    }

    public int getY1() {

        return y1;

    }

    public void setY1(int y1) {

        this.y1 = y1;

    }

    public int getX2() {

        return x2;

    }

    public void setX2(int x2) {

        this.x2 = x2;

    }

    public int getY2() {

        return y2;

    }

    public void setY2(int y2) {

        this.y2 = y2;

    }

    public Point getStart() {

        return start;

    }

    public void setStart(Point start) {

        this.start = start;

    }

    public Point getEnd() {

        return end;

    }

    public void setEnd(Point end) {

        this.end = end;

    }

    public boolean isUsed() {

        return used;

    }

    public void setUsed(boolean used) {

        this.used = used;

    }

    @Override

    public String toString() {

        return "Line [x1=" + x1 + ", y1=" + y1 + ", x2=" + x2 + ", y2=" + y2 + "]";

    }   

}

Main.java


import java.util.ArrayList;

import java.util.List;


class Main {

    public static void main(String args[]) {

        List<Line> givenLines = new ArrayList<Line>();

        givenLines.add(new Line(3350, 1500, 3200, 1500));

        givenLines.add(new Line(1450, 1750, 1450, 2200));

        givenLines.add(new Line(1450, 2200, 2100, 2200));

        givenLines.add(new Line(2400, 2200, 2550, 2200));

        givenLines.add(new Line(2550, 2200, 2550, 2350));

        givenLines.add(new Line(2550, 2350, 2850, 2350));

        givenLines.add(new Line(2850, 2350, 2850, 2700));

        givenLines.add(new Line(2850, 2700, 3350, 2700));

        givenLines.add(new Line(3650, 2700, 3750, 2700));

        givenLines.add(new Line(3750, 2700, 3750, 2600));

        givenLines.add(new Line(3750, 2600, 5250, 2600));

        givenLines.add(new Line(5250, 2600, 5250, 2350));

        givenLines.add(new Line(5250, 2350, 5000, 2350));

        givenLines.add(new Line(4700, 2350, 4350, 2350));

        givenLines.add(new Line(4350, 2350, 4350, 1600));

        givenLines.add(new Line(4350, 1600, 3650, 1600));

        givenLines.add(new Line(3650, 1600, 3650, 1500));

        givenLines.add(new Line(3200, 1500, 3200, 1750));

        givenLines.add(new Line(3200, 1750, 1450, 1750));


        int linesIndex, usedCounter=0;

        List<List<Line>> listOfConnectedLines = new ArrayList<List<Line>>();


        //The start (first) line, in the list of given lines, to be processed to find the first set of connected lines

        Line startLineforTheNextSetOfConnectedLines=givenLines.get(0);

        startLineforTheNextSetOfConnectedLines.setUsed(true);

        usedCounter = 1;        


        //Process the list of given lines until all the lines have been used to form the connected lines

        while (usedCounter < givenLines.size()) {


            linesIndex = 0;         

            List<Line> connectedLines = new ArrayList<Line>();

            connectedLines.add(linesIndex, startLineforTheNextSetOfConnectedLines);     

            Line nextLine=null;


            //Starting with startLineforTheNextSetOfConnectedLines, the variable lastArrangedLine will hold the next lines qualifying to become the connected line 

            Line lastArrangedLine=startLineforTheNextSetOfConnectedLines;


            //Create the list of connected lines starting with startLineforTheNextSetOfConnectedLines

            for (int i = 0; i < givenLines.size(); i++) {

                for (int j = 0; j < givenLines.size(); j++) {

                    nextLine=givenLines.get(j);

                    if (!nextLine.isUsed() && lastArrangedLine.getX2() == nextLine.getX1()

                            && lastArrangedLine.getY2() == nextLine.getY1()) {

                        nextLine.setUsed(true);

                        usedCounter++;

                        connectedLines.add(++linesIndex, nextLine);

                        lastArrangedLine = nextLine;

                        break;

                    }

                }

            }


            //Add the list of connected lines (found from the above nested for loops) to the list of connected lines

            listOfConnectedLines.add(connectedLines);


            //Find the start (first) line for the next set of connected lines

            for (int i = 0; i < givenLines.size(); i++) {

                if(!givenLines.get(i).isUsed()) {

                    startLineforTheNextSetOfConnectedLines=givenLines.get(i);

                    startLineforTheNextSetOfConnectedLines.setUsed(true);

                    usedCounter++;                  

                    break;

                }

            }

        }


        //Display the lists of connected lines

        for(List<Line> connectedLines:listOfConnectedLines)

            System.out.println(connectedLines);

    }

}

給定行列表的輸出:


[Line [x1=3350, y1=1500, x2=3200, y2=1500], Line [x1=3200, y1=1500, x2=3200, y2=1750], Line [x1=3200, y1=1750, x2=1450, y2=1750], Line [x1=1450, y1=1750, x2=1450, y2=2200], Line [x1=1450, y1=2200, x2=2100, y2=2200]]

[Line [x1=2400, y1=2200, x2=2550, y2=2200], Line [x1=2550, y1=2200, x2=2550, y2=2350], Line [x1=2550, y1=2350, x2=2850, y2=2350], Line [x1=2850, y1=2350, x2=2850, y2=2700], Line [x1=2850, y1=2700, x2=3350, y2=2700]]

[Line [x1=3650, y1=2700, x2=3750, y2=2700], Line [x1=3750, y1=2700, x2=3750, y2=2600], Line [x1=3750, y1=2600, x2=5250, y2=2600], Line [x1=5250, y1=2600, x2=5250, y2=2350], Line [x1=5250, y1=2350, x2=5000, y2=2350]]

[Line [x1=4700, y1=2350, x2=4350, y2=2350], Line [x1=4350, y1=2350, x2=4350, y2=1600], Line [x1=4350, y1=1600, x2=3650, y2=1600], Line [x1=3650, y1=1600, x2=3650, y2=1500]]



查看完整回答
反對 回復 2023-10-13
  • 1 回答
  • 0 關注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號