有没有人对如何计算圆线连接有任何提示/想法? 我正在使用的设备仅支持单宽度线。 我试图用只有圆形连接来实现基本的抚摸。
我正在搞乱的一些事情如下。 它并不多,但我希望根据任何回复,在两条线加入时如何处理不同情况的想法。
提前感谢您的帮助。
我在外部联接方面取得了一些进展:
一个。获得顺时针顺序顶点(我从扁平的字形中得到这些)
湾抓住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);
}
}
答案 0 :(得分:0)
如果您的设备可以绘制实心圆圈,则可以在2个端点处放置一个实心圆圈,并在每个线关节处放置一个圆圈。