Reputation: 67
Here is my code, the syntax error is on line 18. I am struggling to understand why I am getting this error.
from visual import *
def Efield(pos, charge)
"""
Calculate electric field due to point charge
Inputs
======
pos - Position where the E field is required (vector)
charge.pos - Position of the charge (vector)
charge.q - Charge (float)
Returns
=======
The electric field vector
"""
r = vector(charge.pos) - vector(pos) # Vector from pos to chargepos
E = float(q) * r / abs(r)**3 # Coulomb's law
return E
# Create some charges
charge1 = sphere(pos=(0,2,0), q=1, radius=0.2, color=color.red) # Positive charge
charge2 = sphere(pos=(0,-2,0), q=-1, radius=0.2, color=color.blue) # Negative charge
# Generate arrows at random locations
random.seed(1234) # Specify a random seed
n = 500
for i in range(n):
x = random.uniform(-4 4)
y = random.uniform(-4,4)
z = random.uniform(-4,4)
pos = vector(x,y,z)
# Make sure pos is not too close to both positive and negative charge
if abs(pos - charge1.pos) > 1 and abs(pos - charge2.pos) > 1:
# Create an arrow if it's far enough from both charges
a = arrow(pos=pos, axis= Efield(pos, charge1) + Efield(pos,charge1))
Upvotes: -3
Views: 947
Reputation: 9093
You are missing a :
after def Effield(pos, charge)
You are also missing a comma on the line:
x = random.uniform(-4 4)
should be
x = random.uniform(-4, 4)
Also this function is not indented at all, which will throw:
IndentationError: expected an indented block
Upvotes: 1