What is the average distance between points in a square?

In my family we love riddles, puzzles and mathematical challenges and it’s not unusual that we share weird problems via our whatsapp group. A couple weeks ago, we received the following question from my brother Alvaro: “what is the average distance between two points in a square?”

Solving this problem mathematically with integrals exceeds my current level of skill, but I realised it would be rather easy to solve this for a discrete amount of points in a square NxN matrix. I could solve it for a matrix of 10×10, 20×20 and see whether the solution converged to a number.

With my raspberry pi, connected via ssh from my iphone, from the comfort of my sofa I wrote the following program in c that iterated with increasing sizes of square matrixes

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double distancia(int x1,int y1,int x2,int y2){
double distx=x2-x1;
double disty=y2-y1;
double distanciaalcuadrado=abs(pow(distx,2)+pow(disty,2));
double distancia=sqrt(distanciaalcuadrado);
return distancia;
}
void mediaPuntos(int intervalos){
double suma=0;
int contador=0;
double media=0.0;
double distancias=0.0;
int x1=1;
int x2=1;
int y1=1;
int y2=1;
double medianor=0;
for(x1=1;x1<=intervalos;x1++){
for(y1=1;y1<=intervalos;y1++){
for(x2=1;x2<=intervalos;x2++){
for(y2=1;y2<=intervalos;y2++){
contador++;
distancias=distancia(x1,y1,x2,y2);
suma=suma+distancias;
media=suma/contador;
medianor=media/intervalos;
//printf("%d:(%d,%d)-(%d,%d)=%f [%f/%d]=%f\n",contador,x1,y1,x2,y2,distancias,media,intervalos,medianor);
}
}
}
}
printf("%d:%d [%f/%d]=%f\n",intervalos,contador,media,intervalos,medianor);
}
void main(void){
printf("sumando distancias\n");
int intervalos=10;
int intervalosmax=100000;
for(;intervalos<=intervalosmax;intervalos++){
mediaPuntos(intervalos);
}
}
view raw meansquaredistance.c hosted with ❤ by GitHub

When reaching a 216×216 matrix, the number of combinations was 2 thousand million at which some variable must have exceeded the maximum size of a double type because I started getting negative results.


The result is that the mean distance between any two points in a square is 0.5214 times the length of the side. I have no clue what this ratio means mathematically.

Do you know what 0.5214 represents in a square of side 1? 🙂

Creating a wifi subnet for the dash buttons

It could be useful to have the dash buttons working with the raspberry pi in a place where there is no wifi or internet coverage. The raspberry pi can be setup as a wifi hotspot and the dash buttons configured to join this network. Taking things a bit further, the raspberry pi could be set up to route requests received via the wifi subnet through the cabled network, to the internet router/home network and to the internet.

Yesterday I managed to do this successfully, following this tutorial. Fun times 🙂

The important files for this are:

/etc/network/interfaces
/etc/dhcpcd.conf
/etc/hostapd/hostapd.conf
/etc/default/hostapd
/etc/dnsmasq.conf

recipe of steps I followed

  1. sudo apt-get update
  2. sudo apt-get install hostapd isc-dhcp-server
  3. sudo apt-get install iptables-persistent
  4. sudo vi /etc/dhcp/dhcpd.conf
    1. comment the lines
      1. #option domain-name “example.org”;
        #option domain-name-servers ns1.example.org, ns2.example.org;
    2. uncomment the line
      1. authoritative;
    3. Add the following lines at the end
      1. subnet 192.168.43.0 netmask 255.255.255.0 {
        range 192.168.43.10 192.168.43.50;
        option broadcast-address 192.168.43.255;
        option routers 192.168.43.1;
        default-lease-time 600;
        max-lease-time 7200;
        option domain-name “local”;
        option domain-name-servers 8.8.8.8, 8.8.4.4;
        }
  5. sudo vi /etc/default/isc-dhcp-server
    1. add wlan0 to the INTERFACES variable
      1. INTERFACES=”wlan0″
  6. sudo ifdown wlan0
  7. sudo vi /etc/network/interfaces
    1. allow-hotplug wlan0
      iface wlan0 inet static
      address 192.168.43.1
      netmask 255.255.255.0
  8. sudo ifconfig wlan0 192.168.43.1
  9. sudo vi /etc/hostapd/hostapd.conf
    1. interface=wlan0
      driver=nl80211
      ssid=jarvis
      country_code=US
      hw_mode=g
      channel=6
      macaddr_acl=0
      auth_algs=1
      ignore_broadcast_ssid=0
      wpa=2
      wpa_passphrase=Raspberry
      wpa_key_mgmt=WPA-PSK
      wpa_pairwise=CCMP
      wpa_group_rekey=86400
      ieee80211n=1
      wme_enabled=1
  10. sudo vi /etc/default/hostapd
    1. DAEMON_CONF=”/etc/hostapd/hostapd.conf”
  11. sudo vi /etc/sysctl.conf
    1. net.ipv4.ip_forward=1
  12. sudo sh -c “echo 1 > /proc/sys/net/ipv4/ip_forward
  13. create NAT rules with iptables
    1. sudo iptables t nat A POSTROUTING o eth0 j MASQUERADE
    2. sudo iptables A FORWARD i eth0 o wlan0 m state state RELATED,ESTABLISHED j ACCEPT
    3. sudo iptables A FORWARD i wlan0 o eth0 j ACCEPT
  14. sudo sh -c “iptables-save > /etc/iptables/rules.v4”
  15. sudo service hostapd start
  16. sudo service isc-dhcp-server start
  17. sudo service hostapd status
  18. sudo service isc-dhcp-server status
  19. sudo update-rc.d hostapd enable
  20. sudo update-rc.d isc-dhcp-server enable
  21. sudo reboot
  22. tail -f /var/log/syslog