gpt4 book ai didi

java - 按程序生成结(并将其可视化)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:29:02 26 4
gpt4 key购买 nike

我正在寻找一种算法来生成 knots 的图形表示(2D 或 3D,但前者最好是 vector 图形)。

我看到了很多关于结理论的链接,范围从 punctual referencesgeneral information

在尝试自己从头开始设计一些东西之前,我想了解一些现有软件的存在,这些软件不仅可以让您代表它们(在内存中),还可以在它们的一些图形表示中可视化(有 many ) .它可以以库或简单函数的形式出现,甚至可以是试图指定如何在屏幕上正确绘制知识的伪代码算法。

正如前面的链接所暗示的,Wolfram Mathematica 中有一个名为 KnotTheory 的程序包可以执行此操作(以几乎完整的方式)。但是,它不是可移植的,也不是免费软件,访问它的模块对我来说非常麻烦(Java 中的免费实现,只是命名一种语言,但每种语言都很好,从可移植性和开放性的角度来看是理想的) .

我看到 many 软件可用(但 most of them 是旧软件,无法访问或使用)。您有一些好的建议可以分享吗?

更新:由于出现了两次结束该问题的投票,我将以一种更加务实和清晰的方式重申它:是否有绘制和生成结的算法?有什么东西已经实现了吗

更新 2(重新开放)图形表示可以是 3D 渲染对象或 2D svg 图形(我从中抽象出来,因为我期待一种编程语言作为处理(或相同的 Mathematica 本身),它为您提供绘制曲线的基元(样条曲线,贝塞尔曲线,等)在屏幕上(然后将它们导出为光栅或 vector 图形)。该算法应将一个结参数化作为输入(即,如果我们谈论由它们的交叉属性描述的结,则它们的值就是所需要的),返回上面的图形表示之一(即甚至是二维空间中的一系列点).也就是说,任何参数化都可以,我的目标只是反射(reflection)如何打结,以便获得一种以特定方式执行此操作的算法,从而产生特定的表示形式,这很好(Mathematica 的库似乎能够以如此多的表示形式绘制它)。

最佳答案

是这样的吗?

void setup() {
size(300, 300, P3D);
}


void draw() {
background(36, 10, 28);
int f = frameCount%360;
translate(width/2, height/2);
if (frameCount >= 360 && frameCount <= 1080 )
rotateY(radians(f));
stroke(0);
drawKnot(40);

translate(knotX(f)*40, knotY(f)*40, knotZ(f)*40);
noStroke();
fill(180,50,145);
sphere(10);
}


void drawKnot(float sz) {
stroke(200);
for (int i = 0; i < 360; i++) {
point(knotX(i)*sz, knotY(i)*sz, knotZ(i)*sz);
}
}


float knotX(int n) {
return sin(radians(n)) + 2*sin(radians(n*2));
}
float knotY(int n) {
return cos(radians(n)) - 2*cos(radians(n*2));
}


float knotZ(int n) {
return sin(radians(n*3))*-1;
}

关于java - 按程序生成结(并将其可视化),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25443480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com