1

我有一个数学问题,我用每个极端创建一条线,一条垂直线,但我想选择这些垂直线的长度,但我不知道该怎么做:(

这是我的代码:

int vX = fleche.endPoint.x - fleche.startPoint.x;
        int vY = fleche.endPoint.y - fleche.startPoint.y;

        int vXP = - ( fleche.endPoint.y - fleche.startPoint.y );

        Paint p = new Paint();
        p.setColor(fleche.color);
        p.setTextSize(30);
        p.setTextAlign(Paint.Align.CENTER);
        p.setStrokeWidth(8);
        p.setAlpha(fleche.alpha);

        Path path = new Path();

        path.moveTo(fleche.startPoint.x - 10,fleche.startPoint.y - 10);
        path.lineTo(fleche.endPoint.x - 10, fleche.endPoint.y - 10);
        c.drawTextOnPath(fleche.value + fleche.unit, path, 30, 0, p);

        c.drawPath(path, p);

        path.moveTo(fleche.startPoint.x - 10,fleche.startPoint.y - 10);
        path.lineTo(fleche.endPoint.x - 10, fleche.endPoint.y - 10);
        c.drawTextOnPath(fleche.value + fleche.unit, path, 30, 0, p);

        //ligne principale
        c.drawLine(fleche.startPoint.x, fleche.startPoint.y, fleche.endPoint.x, fleche.endPoint.y, p);

        //left
        c.drawLine(fleche.startPoint.x, fleche.startPoint.y, fleche.startPoint.x + vXP, fleche.startPoint.y + vX, p);
        c.drawLine(fleche.startPoint.x, fleche.startPoint.y, fleche.startPoint.x - vXP, fleche.startPoint.y - vX, p);

        //right
        c.drawLine(fleche.endPoint.x, fleche.endPoint.y, fleche.endPoint.x + vXP, fleche.endPoint.y + vX, p);
        c.drawLine(fleche.endPoint.x, fleche.endPoint.y, fleche.endPoint.x - vXP, fleche.endPoint.y - vX, p);
        //Tools.logDebug("Fleche créée(" + i + "/" +  (arrows.size()-1) +  ") :" + fleche.toString());

在此先感谢所有人:D

4

1 回答 1

0

这是您可以缩放dxdy长度 L 的方式:

float ratio = L / Math.sqrt(dx * dx + dy * dy);
dx *= ratio;
dy *= ratio;

评论后编辑:

//left
final float L = 20.0f; // for instance
final float ratio = L / Math.sqrt(vXP * vXP + vX * vX);
final float dx = vXP * ratio;
final float dy = vX * ratio;
c.drawLine(fleche.startPoint.x, fleche.startPoint.y, fleche.startPoint.x + dx, fleche.startPoint.y + dy, p);
c.drawLine(fleche.startPoint.x, fleche.startPoint.y, fleche.startPoint.x - dx, fleche.startPoint.y - dy, p);
于 2013-10-04T13:14:19.580 回答