gpt4 book ai didi

python - 如何将重心坐标转换为笛卡尔坐标?

转载 作者:太空宇宙 更新时间:2023-11-04 01:58:04 25 4
gpt4 key购买 nike

根据 wiki , 重心坐标到直角坐标的转换如下

enter image description here

这是一段来自别处的代码

import numpy as np
import matplotlib.pyplot as plt
# from barycentric coordinates to Cartesian coordinates
a = np.array([0. , 0. , 1. , 0.25, 0.25, 0.5 ])
b = np.array([0. , 1. , 0. , 0.25, 0.5 , 0.25])
c = np.array([1. , 0. , 0. , 0.5 , 0.25, 0.25])
x = 0.5 * ( 2.*b+c ) / ( a+b+c )
y = 0.5*np.sqrt(3) * c / (a+b+c)
plt.scatter(x,y)
plt.show()

好像这段代码用的是另外一个公式,如果是,公式是什么?

enter image description here

假设B的重心坐标为(0,0,1),如何计算其直角坐标? B 点的 lambda_1、lambda_2、lambda_3、x_1、x_2、x_3、y_1、y_2、y_3 是什么?

最佳答案

你的公式是正确的。

假设三角形的三个角被编码为矩阵t的列,下面是一个简单的Python实现:

import numpy as np

def get_cartesian_from_barycentric(b, t):
return t.dot(b)

b = np.array([0.25,0.3,0.45]) # Barycentric coordinates
t = np.transpose(np.array([[0,0],[1,0],[0,1]])) # Triangle
c = get_cartesian_from_barycentric(b, t)

您找到的公式也是从重心坐标计算笛卡尔坐标,但使用具有以下坐标的预定义正三角形:

(x1,y1) = (0,0)
(x2,y2) = (1,0)
(x3,y3) = (1/2,sqrt(3)/2)

在这个计算中,代码认为每一列都是一个用重心坐标表示的点。因此,它一次计算 6 个点。此外,重心坐标需要归一化,即 lambda1 + lamda2 + lambda3 = 1。这段代码不假设归一化,所以需要除以 lambda 的总和来确保这个属性。当然,我们可以看到所有 6 个点的总和始终为 1,但代码可用于总和不为 1 的 lambda。


在你给出的最后一个例子中,B是三角​​形的一个点,没有用重心坐标表示。 P 是相对于 A、B、C 点用重心坐标表示的点。令 A = (x1,y1), B = (x2,y2),和 C = (x3,y3),并且 P 具有重心坐标 (l1,l2,l3)。那么P的笛卡尔坐标(xp,yp)

xp = l1*x1 + l2*x2 + l3*x3
yp = l1*y1 + l2*y2 + l3*y3

关于python - 如何将重心坐标转换为笛卡尔坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56328254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com