找到重心权重具有特定值的点

Nat*_*teS 11 geometry

我有三角:a,b,c.每个顶点有一个值:va,vb,vc.在我的软件中,用户拖动p此三角形内外的点.我用重心坐标来确定价值vpp基础上va,vbvc.到现在为止还挺好.

现在我要限制p,使vp在范围内minmax.如果用户选择p其中vp的< min或> max,我怎样才能找到最接近点p,其中vp等于minmax分别,?

编辑:这是我测试每个点的示例.浅灰色在min/ max.如何找到构成min/ max边界的线的方程?

例

a = 200, 180
b = 300, 220
c = 300, 300
va = 1
vb = 1.4
vc = 3.2
min = 0.5
max = 3.5
Run Code Online (Sandbox Code Playgroud)

编辑: FWIW,到目前为止,第一我得到的重心坐标v,wp使用三角形顶点a,b,c(标准的东西,我认为,但看起来像这样).然后得到vp:

u = 1 - w - v
vp = va * u + vb * w + vc * v
Run Code Online (Sandbox Code Playgroud)

这一切都很好.我的麻烦是我需要min/ 的线方程式,max所以我可以选择一个新的位置,以便p何时vp超出范围.新位置p是最接近p最小或最大线的点.

注意,它p是一个XY坐标,vp是由三角形和每个顶点的值确定的坐标值.min并且max也值.我需要的两个线方程将给我XY坐标,由三角形确定的值是minmax.

如果在解决方案中使用重心坐标并不重要.

Nat*_*teS 5

诀窍是使用值与笛卡尔距离的比率来扩展每个三角形边缘,直到达到最小值或最大值.用pic更容易看到:

在此输入图像描述

青色线显示三角形边缘如何延伸,绿色Xs是最小或最大线上的点.只有这两个点,我们知道线的斜率.黄线表示连接Xs与浅灰色对齐.

数学运算如下,首先得到vb和vc之间的值距离:valueDistBtoC = vc - vb

然后得到从b到c的笛卡尔距离:cartesianDistBtoC = b.distance(c)

然后得到从b到max的值距离:valueDistBtoMax = max - vb

现在我们可以交叉乘以得到从b到max的笛卡尔距离:cartesianDistBtoMax =(valueDistBtoMax*cartesianDistBtoC)/ valueDistBtoC

对于min和a,b和c,a也是如此.6点足以限制p的位置.