Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 变换边界框以删除交点_C#_Math - Fatal编程技术网

C# 变换边界框以删除交点

C# 变换边界框以删除交点,c#,math,C#,Math,我正在尝试实现以下内容。我有两个边界A和B,我想变换框B,这样A和B之间的交点就不存在了。我不确定如何计算位移,我想保持方向,即红线 没有写太多的代码,对数学很在行 var a = new Rectangle(40, 40, 20, 20); var b = new Rectangle(25, 30, 20, 20); 因此,对于您提供的情况,b.x(dx)中的偏移可以计算为a.x-b.length-b.x。b.y(dy)中的位移可以通过保持斜率恒定来计算。所以求出y在dx/dy=(a.x-

我正在尝试实现以下内容。我有两个边界A和B,我想变换框B,这样A和B之间的交点就不存在了。我不确定如何计算位移,我想保持方向,即红线

没有写太多的代码,对数学很在行

var a = new Rectangle(40, 40, 20, 20);
var b = new Rectangle(25, 30, 20, 20);

因此,对于您提供的情况,b.x(dx)中的偏移可以计算为
a.x-b.length-b.x
。b.y(dy)中的位移可以通过保持斜率恒定来计算。所以求出y在
dx/dy=(a.x-b.x)/(a.y-b.y)
中的值,这也得到了y的变化


但是,这是您描述的特定情况。除此之外,您需要考虑如果A和B被翻转会发生什么,如果A.x=B.x会发生什么,如果A.y=B.y会发生什么,如果x的差值小于y的差值会发生什么。在图表纸上画画可能会有很大帮助,如果你有,在空白电脑纸上画画可能会有很大帮助。希望这是一个好的开始。

只需检查:构造函数是(左、下、长、高)?矩形构造函数是(x、y、宽度、高度),这是哪个角的(x、y)?左下角?这听起来有点像最小平移距离(MTD)碰撞处理。你应该给它一个谷歌。这并不完全相同-MTD只沿一个轴推出,而您需要两个轴-但它应该给您一些提示。我认为这是这里使用的方法的一个特殊(更简单)情况:感谢您的回答,在我的示例中,x的差异小于y的差异。在你的计算中,它们必须是相同的吗?这取决于你是否希望最终产品接近边界。如果他们必须分开,那没关系。如果它们仍需要触摸,且x的变化小于y的变化,则切换公式中的所有x和y(即,先从a.y、b.height和b.y中找到dy,然后找到dx)。如果你看你画的例子,如果你先向上移动直到盒子不再重叠,然后向左移动以保持角度,你的盒子将不再接触。