3-Line --> 三角形 --> 3-不等式 我要转换

如何解决3-Line --> 三角形 --> 3-不等式 我要转换

如果有任何好的建议,我将不胜感激。 我想从七个地方的三角形部分确定不等号。

https://www.wolframalpha.com/input/?i=x+%E2%88%92+y+%3D+0%2C+x+%2B+y+%E2%88%92+2+%3D+0%2C+3*x+%E2%88%92+y+%E2%88%92+6+%3D+0&lang=ja

https://www.wolframalpha.com/input/?i=x+%E2%88%92+y+%3E%3D+0+%2C+x+%2B+y+%E2%88%92+2+%3E%3D+0%2C++3*x+%E2%88%92+y+%E2%88%92+6+%3C%3D+0&lang=ja

输入: x − y = 0,x + y − 2 = 0,3*x − y − 6 = 0

我想在下面转换

输出: x − y >= 0,x + y − 2 >= 0,3*x − y − 6

解决方法

一种方法是执行以下步骤:

  1. 计算三角形的顶点
  2. 对于每 2 个顶点,计算通过它们的线
  3. 对于每个顶点,检查其他 2 个顶点的线是在顶点之上还是之下

第 1 步

你可以通过找到每对边的交点来找到三角形的顶点:

让我们找出两条线的交点:ax+by+c=0dx+ey+f=0

这个点应该满足两个方程,所以:

ax+by=-c
dx+ey=-f

我们可以通过减去乘以 (b/e) 的第二个方程来从第一个方程中删除 y。我们得到:

(a-(d*b/e))x=-c+(f*b/e) => x=(-c+f*b/e)/(a-(d*b/e))`
dx+ey=-f

然后我们可以通过减去第一个方程乘以 d 来从第二个方程中删除 x。我们得到:

x=(-c+f*b/e)/(a-(d*b/e))
ey=-f-d(-c+f*b/e)/(a-(d*b/e)) => y=(-f-d(-c+f*b/e)/(a-(d*b/e)))/e

所以交点是:((-c+f*b/e)/(a-(d*b/e)),(-f-d(-c+f*b/e)/(a-(d*b/e)))/e)

丑陋,我知道,但它有效:)

第 2 步

现在我们有了三角形的 3 个顶点,让我们称它们为 (x1,y1),(x2,y2),(x3,y3)。通过 2 个点 (a,b)(c,d) 的直线方程为: ((d-b)/(c-a))x-y-(((d-b)/(c-a))a+b)=0

所以这些行是:

((y2-y1)/(x2-x1))x-y-(((y2-y1)/(x2-x1))x1+y1)=0
((y3-y1)/(x3-x1))x-y-(((y3-y1)/(x3-x1))x1+y1)=0
((y3-y2)/(x3-x2))x-y-(((y3-y2)/(x3-x2))x2+y2)=0

第 3 步

如果 a,b,c 是数字使得 b(x',y') 位于线 ax+by+c=0 上方当且仅当 ax' + by' + c <= 0。所以只需检查我们之前找到的方程:三角形的每个顶点都在三角形中,因此直线不等式必须成立,如果顶点在边上方,则三角形中的所有其他点都在上方。

希望你觉得这个答案有用:)

注意:注意极端情况,某些步骤不适用于所有情况(例如当行为 x=0 时)

,

当行 x=not Constant 时(仅对角线大小写)

我试试

from sympy import *
var('x y')
def mySympify(myL):
    return sympify(myL.replace('=0',''))
def myDicXY(myDic):
    return myDic.get(x,""),myDic.get(y,"")
def myStr2Ineq(myStr,myLine,x9,y9):
    if myLine.lhs.subs(x,x9).subs(y,y9) < 0 :
       ans = myStr.replace('=0','<=0')
    else:
       ans = myStr.replace('=0','>=0')
    return ans
myInput="x-y=0,x+y-2=0,3*x-y-6=0"
print("#",myInput)
myStr=myInput.split(',')
myLine_0=Eq(mySympify(myStr[0]),0)
myLine_1=Eq(mySympify(myStr[1]),0)
myLine_2=Eq(mySympify(myStr[2]),0)
x0,y0=myDicXY(solve([myLine_1,myLine_2],[x,y]))
x1,y1=myDicXY(solve([myLine_2,myLine_0],y]))
x2,y2=myDicXY(solve([myLine_0,myLine_1],y]))
myOutput=   myStr2Ineq(myStr[0],myLine_0,x0,y0) + "," \
          + myStr2Ineq(myStr[1],myLine_1,x1,y1) + "," \
          + myStr2Ineq(myStr[2],myLine_2,x2,y2)
print("#",myOutput)
# x-y=0,3*x-y-6=0
# x-y>=0,x+y-2>=0,3*x-y-6<=0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?