抚摸线和计算线连接

时间:2013-08-19 00:17:33

标签: java graphics geometry computational-geometry

有没有人对如何计算圆线连接有任何提示/想法? 我正在使用的设备仅支持单宽度线。 我试图用只有圆形连接来实现基本的抚摸。

我正在搞乱的一些事情如下。 它并不多,但我希望根据任何回复,在两条线加入时如何处理不同情况的想法。

提前感谢您的帮助。

我在外部联接方面取得了一些进展:

一个。获得顺时针顺序顶点(我从扁平的字形中得到这些)
湾抓住3个顶点
C。计算A行的正常值(prevX,prevY) - > (currentX,currentY)
d。计算B行的正常值(currentX,currentY) - > (nextX,nextY)

我使用当前顺时针顶点的左转来计算法线 normal =(deltaY,-deltaX)//感谢Andreas

Vec2[] computeNormals(float prevX, float prevY, float x, float y, float nextX, float nextY) {
    float dx1 = x - prevX;
    float dy1 = y - prevY;

    float dx2 = x - nextX;
    float dy2 = y - nextY;

    Vec2 normal1 = new Vec2(dy1, -dx1).normalize();
    Vec2 normal2 = new Vec2(dy2, -dx2).normalize();
    if (normal1.angleDeg() > normal2.angleDeg()) {
        normal2.rot((float) Math.PI);
    }

    return (new Vec2[] { normal1, normal2 });
}

即从atan2(deltaY,-deltaX)

确定外连接弧角
void computeArc(VertexBuffer dest, float x, float y, float arcRadius, Vec2 normal1, Vec2 normal2) {
    // Angle from Vecto2D is atan2(y, x)
    float angleStart = normal1.angle();
    float angleEnd = normal2.angle();

    float angleInc = (float) Math.PI / 4f; // Temporary, need to find a way to determine numVertices for a Pen of a given width
    while (angleStart > angleEnd) {
        angleStart -= (float) (2f * Math.PI);
    }
    for (float a = angleStart; a <= angleEnd; a += angleInc) {
        float vx = x + ((float) Math.cos(a) * arcRadius);
        float vy = y + ((float) Math.sin(a) * arcRadius);
        dest.addVertex(vx, vy);
    }
}

1 个答案:

答案 0 :(得分:0)

如果您的设备可以绘制实心圆圈,则可以在2个端点处放置一个实心圆圈,并在每个线关节处放置一个圆圈。