我正在尝试将明星的BV颜色索引转换为明显的RGB颜色.除了查找表格和颜色渐变之外,似乎没有众所周知的算法可以做到这一点.
这是天文学家为一颗恒星指定其明显颜色的数字.热星(低BV)是蓝色/紫色,冷色星(高BV)是红色的,其间有白色/橙色星.

var t = 4600 * ((1 / ((0.92 * bv) + 1.7)) +(1 / ((0.92 * bv) + 0.62)) );
Run Code Online (Sandbox Code Playgroud)
如果将星型建模为黑体,则可以使用普朗克轨迹的数值近似来计算xy坐标(CIE色度)



// t to xyY
var x, y = 0;
if (t>=1667 && t<=4000) {
x = ((-0.2661239 * Math.pow(10,9)) / Math.pow(t,3)) + ((-0.2343580 * Math.pow(10,6)) / Math.pow(t,2)) + ((0.8776956 * Math.pow(10,3)) / t) + 0.179910;
} else if (t > 4000 && t <= 25000) {
x = ((-3.0258469 …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个系统,我需要找到一组线性方程的解决方案,其中包含比方程更多的变量.
问题归结为以下几点:
想象一组方程式:
A = A1*X1 + A2*X2 + ... + AnXn
B = B1*X1 + B2*X2 + ... + BnXn
Run Code Online (Sandbox Code Playgroud)
如何为此系统找到一个或多个(正)整数解?
注意:我一直在查看apache-commons-math库,但是我找不到任何关于如何解决/找到具有自由变量的系统解决方案的指示.
是否存在一种算法,用于查找具有最小半径的圆形圆柱以获得3D云点?我知道解决了最小封闭圆的2D情况(例如这个线程在Python中最小的封闭圆圈,代码中有错误),但有没有3D的工作方法?
编辑1:OBB.下面是弧形云点的示例.这个工具找到了最小的圈圈https://www.nayuki.io/page/smallest-enclosing-circle
圆由三个点定义,其中两个几乎位于直径上,因此很容易估计中心轴的位置."拳击"点将产生一个明显偏离真正中心的盒子中心.
我的结论是,OBB方法并不普遍.
EDIT2:PCA.下面是紧密点云对比的PCA分析示例.点云与异常值.对于紧密点云,PCA令人满意地预测气缸方向.但是,如果存在少量的异常值,与主云相比,PCA基本上会忽略它们,产生的矢量距离封闭圆柱体的真实轴线很远.在下面的示例中,封闭圆柱体的真实几何轴以黑色显示.
我的结论是,PCA方法并不普遍.
EDIT3:OBB与PCA和OLS.一个主要区别 - OBB仅依赖于几何形状,而PCA和OLS依赖于总点数,包括那些不影响形状的中间点.为了使它们更有效,可以包括数据准备步骤.首先,找到凸壳.其次,排除所有内部要点.然后,沿着船体的点可以不均匀地分布.我建议删除所有这些,只留下多边形船体,并用网格覆盖它,其中节点将是新点.将PCA或OLS应用于这个新的点云应该可以更准确地估计气缸轴.
如果OBB提供尽可能平行于封闭圆柱轴的轴,则所有这些都是不必要的.
EDIT4:已发布的方法.@meowgoesthedog:Michel Petitjean撰写的论文("关于最小封闭圆柱问题的代数解决方案")可能有所帮助,但我没有足够资格将其转换为工作程序.作者自己也做到了(这里的模块CYL http://petitjeanmichel.free.fr/itoweb.petitjean.freeware.html).但根据论文中的结论,他说:" 现在的软件,名为CYL,可以在http://petitjeanmichel.free.fr/itoweb.petitjean.freeware.html免费下载,并没有声称提供最好的实现这些方法也没有声称比其他气缸计算软件更好地工作. "论文中的其他短语也给人留下了印象,它是一种实验方法,未经过彻底验证.无论如何,我会尝试使用它.
@Ripi2:Timothy M. Chan撰写的这篇论文对我来说也有点复杂.我不是数学水平的专家,能够转换为工具.
@ Helium_1s2:可能,这是一个很好的建议,然而,与上面的两篇论文相比,它的细节要少得多.此外,未经验证.
EDIT5:回复用户1717828.两个最远点与圆柱轴.一个反例 - 立方体形状的8个点,适合圆柱体.两点之间的最大距离 - 绿色对角线.显然不与气缸轴线平行.
Ripi2的"中间点"方法:它仅适用于2D.在3D情况下,圆柱轴可以不与任何两个点之间的单个段相交.
我有一组金属滑动件,它们以下列方式约束在x和y轴上:
我需要最大化由相同滑块约束的所有部件之间的水平距离以及滑动件和滑块本身之间的垂直距离.怎么解决这个问题?
任何能够解决这个问题的建议和建议都将不胜感激.
我首先看了一些非常强大的库,比如cassowary和jsLPSolver但是我在理解核心算法以及如何检查约束的可行性以及如何对可能的解决方案进行排序方面遇到了一些麻烦.
如何在JavaScript中实现一个(简单的)存根,用于二维几何约束求解器,解决上述问题?
编辑:
我有以下输入数据:
maxW = 300, maxH = 320
Run Code Online (Sandbox Code Playgroud)
这些部分定义如下(不是强制性的,每个解决方案都被接受):
slidingPiece = [pX, pY, width, height, anchorPoint, loopDistance];
Run Code Online (Sandbox Code Playgroud)
我将尝试解释"最大化"下的含义.
水平间距:
a0-b1,b1-b2,b2-b4,b4-b5和b5-maxX将是相同的,即max X除以最大垂直交叉片数+ 1(5).然后由可用的剩余空间确定b1-b3和b3-b5.
垂直间距:
b1-a3,a3-a4和a0-b5是相同的.理想地,a0-b3,b3-b4,a2-b2,b4-a3和b2-a4也将是相同的值.最大化a1-b4和b3-a2与最大化b3-b4相同.这同样适用于a2-b2和b4-a3:距离b2-b4将是最大负值.
因此,我需要最大化每个滑动件之间的距离以及他最近或低于Y约束的距离.
该问题的二维几何表示显示水平间距取决于锚的垂直距离(由于锚定件的垂直交叉),而这又取决于件本身的水平位置.比如说,b2比上面略短.在这种情况下,b1和b2不再相交,并且将成为相同的x值,即max X除以4.
在一些其他情况下,例如b2在上面的部分中要长得多 - 并且将穿过锚a2,然后它应该间隔为a1.这就是原因,因为会有一组解决方案,一些是可行的,另一些则不是,因为例如,全局最大Y约束将被打破.
是否有任何库用于顺序非线性优化,具有上限和下限,以及不等式约束,这些库是用Haskell编写的或可以从Haskell轻松调用的?
我有一个特定的运动学作为一个更复杂的机器的一部分,需要计算一些非常困难(更不可能)的物理参数,用我可以使用的仪器以适当的精度进行测量
[运动学]

首先看它是一个简单1的自由度臂(黑色),它可以围绕x轴旋转.它有一个重量,迫使它一直向上,直到它达到机械终点(角度a0)或一些半径的管(蓝色)r0.手臂旋转中心位于y0.管可以移动到任何y(t)高度.
[用法]
这用于测量管的半径以进行进一步处理.可以计算半径(通过基本测角仪),这导致图像底部的方程.常数a0,y0,z0非常难以测量(它在复杂的机械内部),因此距离的测量精度是最小值0.1 mm和角度0.1 deg,甚至是有问题的.
[校准]
所以我决定尝试从机器本身完成的一组测量中计算这些参数(自动校准).所以我有已知半径的校准管r0.所有绿色参数都可以作为常量处理.现在我沿着y轴定位管子以尽可能多地覆盖手臂的角度.遗憾的是,该范围仅为20 degrees(对于当前的机器设置)记住测量a(t)的预设y(t)...作为n点数据集.这给了我n超越方程组.从此我尝试/猜测a0,y0,z0记住最佳解决方案的"所有"可能性(最接近r0)
[近似a0,y0,z0]
近似是基于这类矿井:
//---------------------------------------------------------------------------
class approx
{
public:
double a,aa,a0,a1,da,*e,e0;
int i,n;
bool done,stop;
approx() { a=0.0; aa=0.0; a0=0.0; a1=1.0; da=0.1; e=NULL; e0=NULL; i=0; n=5; done=true; }
approx(approx& a) { *this=a; …Run Code Online (Sandbox Code Playgroud) 我正在开发可以在玉米植物中运行并由罗盘传感器引导的机器人,但我想将相机应用为机器人的眼睛,并使用图像处理来检测运动的误差角度.
这是图像示例.
我使用以下步骤
第1步:我使用的当前技术是将颜色值转换为从此代码修改的HSV
步骤2:所以它将检测所选择的颜色,即褐色或污垢颜色,然后我收集最左右两个棕色或两个阵列中每个图像行的选定颜色(红点).
问题是如何过滤掉玉米叶之间的棕色像素或不在玉米路径中的其他区域?我应该在这个问题上学习或应用哪种算法或方法?
编辑1:使用Spektre的答案,它看起来更好
这是我用JAVA + Boofcv应用它之后的结果
更多信息
我有 3 个接收器(A、B 和 C),以及一些位置未知的信号产生源(比如说声音或光)。给定 A、B 和 C 的位置,以及每个接收器“听到”信号的时间,我想确定源的方向。
我知道有一些方法可以通过 TDoA 多边/三边测量来实现,但是我在实现计算时遇到了麻烦。对于那些完全不熟悉该主题的人,没有很多关于此的清晰、详细的信息。外面的东西是模糊的,更理论化的,或者对我来说有点太深奥了。
SO 上的一些类似帖子(但不完全是我所追求的): TDOA 多点定位以定位声源 使用时差(TDOA)对信号进行三边测量
这也很有趣,但假设我们有一些界限: 距离数据不准确的多文字实现
@Dave 还评论了一个优秀且相当易于访问的资源https://sites.tufts.edu/eeseniordesignhandbook/files/2017/05/FireBrick_OKeefe_F1.pdf,但它没有达到足够的深度,以至于人们可能能够实际实现这一点在代码中(至少,对于没有深入了解回归知识的人,找到结果双曲线的交集等)。
[编辑]:我应该补充一点,我可以假设 3 个传感器和源位于地球表面,并且地球曲率的影响可以忽略不计(即我们可以在二维中工作)。
是否有任何算法可以使用有限数量的线段和圆弧(恒定曲率)来逼近 xy 平面(即由 x 和 y 定义的有序点集)上的路径?结果曲线需要是 C1(斜率的连续性)。
最大数量或线段和弧线可以是一个参数。另一个有趣的约束是防止两个连续的圆弧没有中间线段连接它们。
我看不出有任何方法可以做到这一点,我认为不存在针对它的方法,但欢迎对此目标的任何暗示。
例子:
考虑这条路。它看起来像一条线,但实际上是一组非常接近的点的有序套件。没有噪音,点序列的顺序是众所周知的。
我想用最少连续的线段和圆弧(假设 10 个线段和 10 个圆弧)和 C1 连续性来近似这条曲线。段/弧的数量本身不是一个目标,但我需要任何参数来减少/增加这个数量,以达到一定的参数化简单性,但代价是精度损失。
解决方案:
这是我的解决方案,基于 Spektre 的回答。红色曲线为原始数据。黑线是线段,蓝色曲线是圆弧。绿色十字是显示半径的圆弧中心,蓝色十字是线段可能连接的点。
我有k组向量。这些向量的长度均相同m。这些集合的长度并不相同,但假设每个集合的平均长度为n 个向量。我需要找到彼此之间距离最小(L2 范数)的向量组(每组一个)。这类似于“最接近的对”问题,但这只是 2 组,而我有k组。
\nna\xc3\xafve 方法是交叉连接所有值并搜索所有O(n^k)距离。有更好的方法/算法吗?
\nExample \nSet A [[0.1, 0.2], [0.3, 0.4], [0.5, 0.6]] \nSet B [[0.5, 0.9], [0.1, 0.3], [0.9, 0.1]] \nSet C [[0.2, 0.2], [0.8, 0.4], [0.5, 0.1]] \nResult - A [0.1, 0.2], B [0.1, 0.3], C [0.2, 0.2] with L2 distance 0.14 \n\nRun Code Online (Sandbox Code Playgroud)\n