英文:
How to calculate curve line perpendicular offset?
问题
我有一组曲线线段的位置,这些位置对应于图像中的红色线条,
现在我需要计算出其余曲线线段的位置,这些位置对应于图像中的绿色线条。
我想要将所有线段组合成多边形以进行绘制,这与图像中的蓝色线条对应,我不能使用线段来实现它。因为我需要根据测量数据来渲染颜色。
现在我使用三角形来绘制蓝色线条。
我应该如何计算垂直曲线线段的偏移?
英文:
I have a set of positions of a curve line which red line of image,
Now I have to calculate positions of rest curve lines which green line of image.
I want to combine all lines as polygon for draw which the blue line of image, I can't use line with to do it. Because I need to render color by measure data.
Now I draw blue line with triangles.
How should I calculate perpendicular curve line offset?
答案1
得分: 1
这是局部投影到2D吗?
偏移一条线意味着只需将偏移添加到其端点。在2D中,垂直位移计算非常简单。您有线端点 P0,P1
,想要线 Q0,Q1
,它与 P0,P1
平行,距离为 l
,所以:
dp = P1-P0 // 线的方向向量
dp /= length(dp) // 使其成为单位向量
dq = vec2( +dp.y, -dp.x ) // 在2D中旋转90度,使dq垂直于dp
dq *= l // 偏移现在等于大小l
Q0 = P0 + dq
Q1 = P1 + dq
如果您正在处理曲线或多边形,则必须处理边缘,请参阅:
如果这是3D的话,您必须使用cross
乘积来获取dq
,并带有某个参考方向(比如地球表面的法线):
dq = cross (dp , some_refernce_direction_unit_vector)
dq *= l
英文:
so this is locally projected to 2D?
Offsetting a line means you just add offset to its endpoints. The perpendicular shift is computed in 2D very simply. You have line endpoints P0,P1
and want line Q0,Q1
which is parallel to P0,P1
at distance l
so:
<!-- language: cpp -->
dp = P1-P0 // line direction vector
dp /= length(dp) // make it unit
dq = vec2( +dp.y, -dp.x ) // rotate by 90 deg in 2D so dq is perpendicular to dp
dq *= l // offset is now equal to size l
Q0 = P0 + dq
Q1 = P1 + dq
now if you are doing curves or polygons you have to handle the edges see:
if this is 3D then you have to use cross
product to get the dq
along with some reference direction (like normal to earth surface)
dq = cross (dp , some_refernce_direction_unit_vector)
dq *= l
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论