[C#]MathNet.NumericsとMathNet.Symbolicsの使い方
解決したいこと
2つのPointによって求められる直線と、長径と短径によって求められる楕円があります。
この時、直線が楕円の接線になっているか調べたいです。
もし接線になっていたら、その接点も調べたいです。
使用するライブラリはMathNet.NumericsとMathNet.Symbolicsを検討しているのですが、Web上を検索してもなかなかヒットしません。誰か使い方がわかる方はいらっしゃいますでしょうか?
よろしければご教授下さい。サンプルコードがあると助かります。
※本件ではUnityは使いません。
自分で試したこと
とりあえず、方程式だけは書いてみました。
あと、楕円についてですが中心が原点でない場合を考える必要がありました。なので、以下のコードは半分くらい無駄になります。
MathNetTest.cs
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace boilersGraphics.Test
{
[TestFixture]
public class MathNetTest
{
[Test]
public void Basic()
{
//直線の式
var x = MathNet.Symbolics.Expression.Symbol("x");
var y = MathNet.Symbolics.Expression.Symbol("y");
var x1 = MathNet.Symbolics.Expression.Symbol("x1");
var y1 = MathNet.Symbolics.Expression.Symbol("y1");
var x2 = MathNet.Symbolics.Expression.Symbol("x2");
var y2 = MathNet.Symbolics.Expression.Symbol("y2");
MathNet.Symbolics.Expression left_line = MathNet.Symbolics.Infix.ParseOrThrow("y-y1");
MathNet.Symbolics.Expression right_line = MathNet.Symbolics.Infix.ParseOrThrow("(y2-y1)/(x2-x1)*(x-x1)");
//楕円の式
var a = MathNet.Symbolics.Expression.Symbol("a");
var b = MathNet.Symbolics.Expression.Symbol("b");
MathNet.Symbolics.Expression left_ellipse = MathNet.Symbolics.Infix.ParseOrThrow("x^2/a^2+y^2/b^2");
MathNet.Symbolics.Expression right_ellipse = MathNet.Symbolics.Infix.ParseOrThrow("1");
//楕円の接線の方程式
MathNet.Symbolics.Expression left_tangent = MathNet.Symbolics.Infix.ParseOrThrow("x*x1/a^2+y*y1/b^2");
MathNet.Symbolics.Expression right_tangent = MathNet.Symbolics.Infix.ParseOrThrow("1");
}
}
}
中心が原点でない楕円は下記サイトが参考になりそうです。
0