如何在Android中的星形拓扑中绘制一些朋友

时间:2011-12-20 12:54:09

标签: java android algorithm topology

我有一些问题。

假设我有Q图标(简单的图标让我们说android徽标),我想将它们放置在针对单星中心(图标)的星形拓扑中,并在Android画布上连接它们。

enter image description here

我该怎么做?

任何确切的链接?

任何算法信息?

2 个答案:

答案 0 :(得分:1)

基本上你想要做的是在中心周围创建点,给点一个图标和一条连接它们与中心的线。
在圆上创建2d点可以用余弦/正弦曲线完成:

double angle;
point.x = offsetX + radius*Math.cos(angle);
point.y = offsetY + radius*Math.sin(angle);

使用适当的值为每个接触点增加角度,并在数组或列表中存储这样的点 在绘图时,将图标以其点(yourCanvas.drawBitmap())为中心绘制,并在中心点(yourCanvas.drawLine())绘制一条线。

答案 1 :(得分:0)

public  void starTopology(Canvas mCanvas,int noOfFriends,float centerX,float centerY,int radious) {


        final double PI = 3.14;
        final double MARGIN = (2*PI)/noOfFriends;
        final double OFFSETX = centerX;
        final double OFFSETY = centerY;
        final int RADIUS = radious;

        float pointXCoord = 0;
        float pointYCoord = 0;
        double NextPositionOnCircumference = MARGIN;



        Paint myCustomizedBrush = new Paint();
        myCustomizedBrush.setAntiAlias(true);

        myCustomizedBrush.setColor(Color.WHITE);


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

            pointXCoord =  (float) (OFFSETX + RADIUS * Math.cos(NextPositionOnCircumference));
            pointYCoord  = (float) (OFFSETY + RADIUS * Math.sin(NextPositionOnCircumference));

            NextPositionOnCircumference += MARGIN;
            mCanvas.drawLine((float)OFFSETX, (float)OFFSETY, pointXCoord, pointYCoord, myCustomizedBrush);
            pointXCoord -= 10;
            pointYCoord -= 10;
            mCanvas.drawBitmap(Utility.FriendProfilePic.get(i), pointXCoord, pointYCoord, null);


        }
        mCanvas.drawCircle((float)OFFSETX, (float)OFFSETY, 5, myCustomizedBrush);

}