相关疑难解决方法(0)

均匀地在球体上分布n个点

我需要一个算法,可以给我一个球体周围的位置N点(可能小于20),模糊地将它们展开.没有必要"完美",但我只是需要它,所以没有一个被捆绑在一起.

  • 这个问题提供了很好的代码,但是我找不到制作这种制服的方法,因为这似乎是100%随机化的.
  • 这个博客文章推荐有两种方式允许输入球体上的点数,但Saff和Kuijlaars算法完全是我可以转录的伪代码,我发现的代码示例包含"node [k]",我不能看到解释并破坏了这种可能性.第二个博客的例子是黄金分割螺旋,它给了我奇怪的,褶皱的结果,没有明确的方法来定义恒定的半径.
  • 这种算法这个问题好像它可能工作,但我无法拼凑出那是什么网页上成伪代码或任何东西.

我遇到的一些其他问题主题是随机均匀分布,这增加了我不关心的复杂程度.我很抱歉这是一个如此愚蠢的问题,但我想表明我真的很努力,但仍然很短暂.

所以,我正在寻找的是简单的伪代码,可以在单位球体周围均匀分布N个点,这些点可以返回球形或笛卡尔坐标.如果它甚至可以通过一点随机分布来更好(想想围绕恒星的行星,分散得很好,但有余地的余地).

python algorithm math geometry uniform

110
推荐指数
8
解决办法
8万
查看次数

如何在屏幕上有效地绘制N个点?

这听起来像一个简单的问题,但我发现以良好的性能获得正确性令人惊讶.

我提出的第一个算法是随机绘制点,从集合中检查是否已经绘制,否则绘制它.如果我们绘制几个点但是当我们接近填充屏幕时灾难性地减慢,这可以正常工作.

我想出的最好的是构造像素列表,将其洗牌并选择第一个n(我使用了python的random.sample).它工作得更好,但仍然有点慢,因为整个像素列表需要在内存中构建,这在绘制5个点时非常难以克服.这是我的python代码:

#!/usr/bin/env python
""" drawn n random points on the screen """
import pygame
from pygame.locals import *
import sys
import random
from itertools import product

n = int(sys.argv[1])
s = pygame.display.set_mode()
sx, sy = s.get_size()

points = random.sample(list(product(range(sx), range(sy))), n)

for p in points:
    s.fill((255, 255, 255), pygame.Rect(*p, 1, 1))
pygame.display.flip()
while True:
    for event in pygame.event.get():
        if event.type == QUIT or event.type == KEYDOWN:
            sys.exit()
Run Code Online (Sandbox Code Playgroud)

有关更好算法的任何建议吗?

编辑:刚发现这个问题被称为"水库采样".维基百科有许多好的算法:https://en.wikipedia.org/wiki/Reservoir_sampling

python algorithm

5
推荐指数
1
解决办法
127
查看次数

圆周上每个点的坐标

首先,请注意,这个问题不是这些问题的重复:1st2nd3rd

我正在使用 delphi 和 openCV,但我正在寻找一种算法,一种与语言无关的解决方案。

为了进行精确的图像分析,我需要检查圆形区域中像素强度的变化。所以我在不断增长的圆的圆周上读取像素值。为了能够做到这一点,我当然需要知道像素的坐标。

我找到的最好的解决方案是y:= Round(centerY + radius * sin(angle)), x:= Round(centerX + radius * cos(angle)),因为只用 360 度计数是不够的,当圆的半径大于大约 60 像素时,角度是这样计算的angle:= angle + (360 / (2 * 3.14 * currentRadius))- > 我扫描了从 0 到 360 的每个值,而该值正在增加 360/圆周长的一小部分(以像素为单位)。但是这种方法不是很精确。圆越大,角度的分数需要越小,精度会受到 Pi 的不准确以及四舍五入的影响。

如果我使用上述方法,并尝试使用以下代码绘制计数像素:

  centerX:= 1700;
  centerY:= 1200;
  maxRadius:= 500;

  for currentRadius:= 80 to maxRadius do
  begin

    angle:= 0;
    while angle < 360 do
    begin

      xI:= Round(centerX + currentRadius * cos(angle));
      yI:= Round(centerY …
Run Code Online (Sandbox Code Playgroud)

delphi algorithm math opencv image-processing

5
推荐指数
1
解决办法
3462
查看次数

在圆上生成点

import random
import math
import matplotlib.pyplot as plt


def circle():
    x = []
    y = []
    for i in range(0,1000):
        angle = random.uniform(0,1)*(math.pi*2)
        x.append(math.cos(angle));
        y.append(math.sin(angle));
    plt.scatter(x,y)
    plt.show()
circle()
Run Code Online (Sandbox Code Playgroud)

我已经编写了上面的代码,在单位圆上随机绘制1000个点.但是,当我运行此代码时,由于某种原因它会绘制一个椭圆.为什么是这样?

在此输入图像描述

python matplotlib

4
推荐指数
1
解决办法
2208
查看次数