我有三角:a,b,c.每个顶点有一个值:va,vb,vc.在我的软件中,用户拖动p此三角形内外的点.我用重心坐标来确定价值vp的p基础上va,vb和vc.到现在为止还挺好.
现在我要限制p,使vp在范围内min和max.如果用户选择p其中vp的< min或> max,我怎样才能找到最接近点p,其中vp等于min或max分别,?
编辑:这是我测试每个点的示例.浅灰色在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,w对p使用三角形顶点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坐标,由三角形确定的值是min或max.
如果在解决方案中使用重心坐标并不重要.
诀窍是使用值与笛卡尔距离的比率来扩展每个三角形边缘,直到达到最小值或最大值.用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的位置.