查找线的交点并创建单独的线

问题描述 投票:-1回答:1

我有一个AutoCad工程图的轴列表的列表。类似于:

[Line3D(Point3D(1647113117371448512892615841780535357281063/737059219536588389452555455100000000000,
                1366943276273750947371820063466288403112033/737059219536588389452555455100000000000,0),
        Point3D(26100284670260312636891118431/12305005361967700000000000,
                1189236919681/781250000, 0)), ...]

它基本上为您提供线的开始和结束坐标。如果它们相似,则必须分开。 It has to be like that!但是,如果未按顺序绘制线条,我们将得到类似以下内容:This我想使这两行分开。对于工程图,我们可能会有50-60条线。因此,我们必须以某种方式修复它。我使用SymPy。我还将附上基本的线路清单供您使用。请帮帮我。多数民众赞成在一个基本的图纸清单。我希望你了解我的需要。谢谢。如果看不到图像,我在下面添加了另一个链接。

[Line3D(Point3D(1647113117371448512892615841780535357281063/737059219536588389452555455100000000000,
                1366943276273750947371820063466288403112033/737059219536588389452555455100000000000, 0),
        Point3D(26100284670260312636891118431/12305005361967700000000000,1189236919681/781250000, 0)),
 Line3D(Point3D(26100284670260312636891118431/12305005361967700000000000, 1189236919681/781250000, 0),
        Point3D(25165031213118241584901717751/12305005361967700000000000, 32496091107827/25000000000, 0)),
 Line3D(Point3D(41101789294162424289223442852282888370853/12972516184739051605249750292000000000,
                6691132495400952526204407114066106055714449/3567441950803239191443681330300000000000, 0),
        Point3D(1428208758971484993356170173/478363263194784800000000, 1189236919681/781250000, 0)),
 Line3D(Point3D(1428208758971484993356170173/478363263194784800000000, 1189236919681/781250000, 0),
        Point3D(6865969238483742249815501841/2391816315973924000000000, 32496091107827/25000000000, 0)),
 Line3D(Point3D(1647113117371448512892615841780535357281063/737059219536588389452555455100000000000,
                1366943276273750947371820063466288403112033/737059219536588389452555455100000000000, 0),
        Point3D(41101789294162424289223442852282888370853/12972516184739051605249750292000000000,
                6691132495400952526204407114066106055714449/3567441950803239191443681330300000000000, 0)),
 Line3D(Point3D(41101789294162424289223442852282888370853/12972516184739051605249750292000000000,
                6691132495400952526204407114066106055714449/3567441950803239191443681330300000000000, 0),
        Point3D(42856219552476685009520165509926367369987/21754044541659661721907121840000000000,
                1105918704715895215440142199637240956944223/598236224895640697352445850600000000000, 0)),
 Line3D(Point3D(26100284670260312636891118431/12305005361967700000000000, 1189236919681/781250000, 0),
        Point3D(1428208758971484993356170173/478363263194784800000000, 1189236919681/781250000, 0)),
 Line3D(Point3D(1428208758971484993356170173/478363263194784800000000, 1189236919681/781250000, 0),
        Point3D(3662923296227402176907170887/2001416543837740000000000, 1189236919681/781250000, 0)),
 Line3D(Point3D(25165031213118241584901717751/12305005361967700000000000, 32496091107827/25000000000, 0),
        Point3D(6865969238483742249815501841/2391816315973924000000000, 32496091107827/25000000000, 0)),
 Line3D(Point3D(6865969238483742249815501841/2391816315973924000000000, 32496091107827/25000000000, 0),
        Point3D(3472204942560698802701958357/2001416543837740000000000, 32496091107827/25000000000, 0)),
 Line3D(Point3D(42856219552476685009520165509926367369987/21754044541659661721907121840000000000,
                1105918704715895215440142199637240956944223/598236224895640697352445850600000000000, 0),
        Point3D(3662923296227402176907170887/2001416543837740000000000, 1189236919681/781250000, 0)),
 Line3D(Point3D(3662923296227402176907170887/2001416543837740000000000, 1189236919681/781250000, 0),
        Point3D(3472204942560698802701958357/2001416543837740000000000, 32496091107827/25000000000, 0))
 ]

First ImageSecond Image

python numpy sympy intersection cad
1个回答
0
投票

尽管Python支持任意大小的整数,但是两个高精度整数的除法给出了有限精度的浮点数。因此,让我们考虑您的两个整数

>>> n,d=1647113117371448512892615841780535357281063,737059219536588389452555455100000000000

并且让我们比较n/dn/(d+10^20)的比率:

>>> n/d == n/(d + 10**20)
True

因此,即使您给出的示例不存在此问题,也许在“ 50-60”行情况下的某些示例也会出现此问题。最简单的解决方法是将您要处理的一行字符串简化为符号,例如lines = sympify('''[[Line3D(Point3D(1/2,...))]'''))。这会将整数比率转换为任意精度的有理数,并且希望在绘制时不会对您造成精度损失。

© www.soinside.com 2019 - 2024. All rights reserved.