《RhinoPython 101》中关于R1与R3点的转换,为什么曲线端点无法显示点?

image

代码文件呢??你这只放一张图,让别人咋帮你啊。

不好意思~
import rhinoscriptsyntax as rs

def main():
curve_id = rs.GetObject(“Select a curve to sample”, 4, True, True)
if not curve_id: return
rs.EnableRedraw(False)
t = 0
while t <= 1.0:
addpointat_r1_parameter(curve_id,t)
t += 0.002
rs.EnableRedraw(True)

def addpointat_r1_parameter(curve_id, parameter):
domain = rs.CurveDomain(curve_id)
r1_param = domain[0] + parameter * (domain[1] - domain[0])
r3point = rs.EvaluateCurve(curve_id, r1_param)
if r3point:
point_id = rs.AddPoint(r3point)
rs.ObjectColor(point_id, parametercolor(parameter))

def parametercolor(parameter):
red = 255 * parameter
if red<0: red=0
if red>255: red=255
return (red, 0, 255-red)

if name==“main”:
main()

发现你还在英文论坛发了帖子。《RhinoPython 101》-Why can't the curve endpoints be displayed? - Scripting - McNeel Forum

看见你的问题再加上你提供的代码,我第一反应就是取不到 t=1才导致取不到终点,所以我用print试了试。


发现确实取不了t=1,你可以试试下面的代码。

t = 0
while t <= 1.0:
    print t
    t += 0.002

然后我猜肯定是容差造成的问题,所以我用python编辑器试了试。看最后的0.998其实是0.99800000000008,所以再加一个0.02就超过1.0了,没有进入循环。

所以这个问题你只需要给他一个容差就可以了。一般编程的时候也要考虑容差问题。

2 个赞

太感谢了!刚开始学习编程,你的回答太专业,太暖心了!给了我学习下去的动力!


我发现给变量t保留3为有效小数,也可以将曲线末端的点显示出来。

那肯定啊,你都把后面的小数给抹掉了

嗯,我只是更倾向于不修改区间。

https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/overview/reals.html

帮月神补充一下
刚开始学代码,容差的概念非常重要。

不过有个问题: :crazy_face: :crazy_face:
你的学习动力难道不应该来自于自己吗?
碰不到暖心或者专业的回答,就失去了学习的动力吗?那可不行。
实际情况就是,你并不是总能碰到那么好的运气,学习的道路更多的是独立攻关的艰辛。编程是一个巨坑,做好随时被虐的准备。:rofl:

3 个赞

谢谢关于这个专业问题的补充。
确实,NARUTO(应该就是你说的月神)讲的容差概念让我第一时间很震惊,原来你是这样的计算机!
我刚接触Rhino编程,抽空在看《RhinoPython 101》,有很多概念和逻辑都没有理清楚,有些代码案例有时要花很长时间才能搞明白,但有些问题以及由此延伸开的问题还一直悬而未决。正如你所说,很艰辛!抱着试试看的态度,来这里提问,说实话没抱多大希望,但NARUTO的回答除了专业外,确实让我觉得很暖。关于Rhino编程的学习,如果我闭门造车,可能最后真会放弃。但如果能在学习的过程中结交一些志同道合的朋友,他们的每一次帮助和交流就都会成为我不断学习的动力。
感谢rhino3d论坛,在网络空间认识你(Deer)和NARUTO,很开心! :smiley:

1 个赞